Java併發ThreadLocalRandom類
java.util.concurrent.ThreadLocalRandom
是從jdk 1.7
開始引入的實用程序類,當需要多個線程或ForkJoinTasks
來生成隨機數時很有用。 它提高了性能,並且比Math.random()
方法佔用更少的資源。
ThreadLocalRandom方法
以下是ThreadLocalRandom
類中可用的重要方法的列表。
編號
方法
說明
1
public static ThreadLocalRandom current()
返回當前線程的ThreadLocalRandom
。
2
protected int next(int bits)
生成下一個僞隨機數。
3
public double nextDouble(double n)
返回僞隨機,均勻分佈在0(含)和指定值(獨佔)之間的double
值。
4
public double nextDouble(double least, double bound)
返回在給定的least
值(包括)和bound
(不包括)之間的僞隨機均勻分佈的值。
5
public int nextInt(int least, int bound)
返回在給定的least
值(包括)和bound
(不包括)之間的僞隨機均勻分佈的整數值。
6
public long nextLong(long n)
返回僞隨機均勻分佈的值在0(含)和指定值(不包括)之間的長整數值。
7
public long nextLong(long least, long bound)
返回在給定的最小值(包括)和bound
(不包括)之間的僞隨機均勻分佈的長整數值。
8
public void setSeed(long seed)
設置僞隨機的種子值,拋出UnsupportedOperationException
異常。
示例
以下TestThread
程序演示了Lock
接口的一些方法。 這裏我們使用lock()
獲取鎖和unlock()
來釋放鎖。
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());
}
}
執行上面代碼,將產生以下結果 -
Random Integer: 694316820
Seeded Random Integer: -1159716814
Exception in thread "main" Thread Local Random Integer: -1324834819
java.lang.UnsupportedOperationException
at java.util.concurrent.ThreadLocalRandom.setSeed(ThreadLocalRandom.java:236)
at com.yiibai.TestThread.main(TestThread.java:18)