ThreadLocalRandom-Klasse
Ein java.util.concurrent.ThreadLocalRandom ist eine Dienstprogrammklasse, die ab jdk 1.7 eingeführt wurde und nützlich ist, wenn mehrere Threads oder ForkJoinTasks erforderlich sind, um Zufallszahlen zu generieren. Es verbessert die Leistung und ist weniger umstritten als die Math.random () -Methode.
ThreadLocalRandom-Methoden
Im Folgenden finden Sie eine Liste wichtiger Methoden, die in der ThreadLocalRandom-Klasse verfügbar sind.
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | public static ThreadLocalRandom current() Gibt das ThreadLocalRandom des aktuellen Threads zurück. |
2 | protected int next(int bits) Erzeugt die nächste Pseudozufallszahl. |
3 | public double nextDouble(double n) Gibt einen pseudozufälligen, gleichmäßig verteilten Doppelwert zwischen 0 (einschließlich) und dem angegebenen Wert (exklusiv) zurück. |
4 | public double nextDouble(double least, double bound) Gibt einen pseudozufälligen, gleichmäßig verteilten Wert zwischen dem angegebenen kleinsten Wert (einschließlich) und gebunden (exklusiv) zurück. |
5 | public int nextInt(int least, int bound) Gibt einen pseudozufälligen, gleichmäßig verteilten Wert zwischen dem angegebenen kleinsten Wert (einschließlich) und gebunden (exklusiv) zurück. |
6 | public long nextLong(long n) Gibt einen pseudozufälligen, gleichmäßig verteilten Wert zwischen 0 (einschließlich) und dem angegebenen Wert (exklusiv) zurück. |
7 | public long nextLong(long least, long bound) Gibt einen pseudozufälligen, gleichmäßig verteilten Wert zwischen dem angegebenen kleinsten Wert (einschließlich) und gebunden (exklusiv) zurück. |
8 | public void setSeed(long seed) Löst eine nicht unterstützte OperationException aus. |
Beispiel
Das folgende TestThread-Programm demonstriert einige dieser Methoden der Lock-Schnittstelle. Hier haben wir lock () verwendet, um die Sperre zu erhalten, und lock (), um die Sperre aufzuheben.
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());
}
}
Dies führt zu folgendem Ergebnis.
Ausgabe
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)
Hier haben wir ThreadLocalRandom- und Random-Klassen verwendet, um Zufallszahlen zu erhalten.