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)