ThreadLocalRandom Classe

Un java.util.concurrent.ThreadLocalRandom est une classe utilitaire introduite à partir de jdk 1.7 et est utile lorsque plusieurs threads ou ForkJoinTasks sont nécessaires pour générer des nombres aléatoires. Elle améliore les performances et a moins de conflits que la méthode Math.random ().

Méthodes ThreadLocalRandom

Voici la liste des méthodes importantes disponibles dans la classe ThreadLocalRandom.

N ° Sr. Méthode et description
1

public static ThreadLocalRandom current()

Renvoie le ThreadLocalRandom du thread actuel.

2

protected int next(int bits)

Génère le prochain nombre pseudo-aléatoire.

3

public double nextDouble(double n)

Renvoie une valeur double pseudo-aléatoire uniformément distribuée entre 0 (inclus) et la valeur spécifiée (exclusive).

4

public double nextDouble(double least, double bound)

Renvoie une valeur pseudo-aléatoire uniformément distribuée entre la valeur la plus faible (incluse) et la borne (exclusive).

5

public int nextInt(int least, int bound)

Renvoie une valeur pseudo-aléatoire uniformément distribuée entre la valeur la plus faible (incluse) et la borne (exclusive).

6

public long nextLong(long n)

Renvoie une valeur pseudo-aléatoire distribuée uniformément entre 0 (inclus) et la valeur spécifiée (exclusive).

sept

public long nextLong(long least, long bound)

Renvoie une valeur pseudo-aléatoire uniformément distribuée entre la valeur la plus faible (incluse) et la borne (exclusive).

8

public void setSeed(long seed)

Lève une exception UnsupportedOperationException.

Exemple

Le programme TestThread suivant illustre certaines de ces méthodes de l'interface de verrouillage. Ici, nous avons utilisé lock () pour acquérir le verrou et unlock () pour libérer le verrou.

import java.util.Random;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.ThreadLocalRandom;

public class TestThread {
  
   public static void main(final String[] arguments) {
      System.out.println("Random Integer: " + new Random().nextInt());  
      System.out.println("Seeded Random Integer: " + new Random(15).nextInt());  
      System.out.println(
         "Thread Local Random Integer: " + ThreadLocalRandom.current().nextInt());
      
      final ThreadLocalRandom random = ThreadLocalRandom.current();  
      random.setSeed(15); //exception will come as seeding is not allowed in ThreadLocalRandom.
      System.out.println("Seeded Thread Local Random Integer: " + random.nextInt());  
   }
}

Cela produira le résultat suivant.

Production

Random Integer: 1566889198
Seeded Random Integer: -1159716814
Thread Local Random Integer: 358693993
Exception in thread "main" java.lang.UnsupportedOperationException
        at java.util.concurrent.ThreadLocalRandom.setSeed(Unknown Source)
        at TestThread.main(TestThread.java:21)

Ici, nous avons utilisé les classes ThreadLocalRandom et Random pour obtenir des nombres aléatoires.