在Java 7及以后的版本中,引入了一個(gè)新的線程安全的偽隨機(jī)數(shù)生成器ThreadLocalRandom,它是java.util.Random類的變體,通過ThreadLocal機(jī)制保證了線程安全性,可以用于多線程環(huán)境下的隨機(jī)數(shù)生成。
ThreadLocalRandom類中定義了許多靜態(tài)方法,可以用來生成不同類型的隨機(jī)數(shù),例如:
nextInt(int n):生成一個(gè)0(含)到指定數(shù)值n(不含)之間的隨機(jī)整數(shù)。
nextLong(long n):生成一個(gè)0(含)到指定數(shù)值n(不含)之間的隨機(jī)長整數(shù)。
nextDouble():生成一個(gè)0(含)到1.0(不含)之間的隨機(jī)雙精度浮點(diǎn)數(shù)。
nextBoolean():生成一個(gè)隨機(jī)的布爾值。
ThreadLocalRandom類的使用示例:
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalRandomExample {
public static void main(String[] args) {
// 生成一個(gè)0~10之間的隨機(jī)整數(shù)
int randomInt = ThreadLocalRandom.current().nextInt(10);
System.out.println("Random integer: " + randomInt);
// 生成一個(gè)0~1之間的隨機(jī)雙精度浮點(diǎn)數(shù)
double randomDouble = ThreadLocalRandom.current().nextDouble();
System.out.println("Random double: " + randomDouble);
// 生成一個(gè)true或false的隨機(jī)布爾值
boolean randomBoolean = ThreadLocalRandom.current().nextBoolean();
System.out.println("Random boolean: " + randomBoolean);
}
}
需要注意的是,ThreadLocalRandom類的使用應(yīng)該盡量避免在單線程環(huán)境下使用,因?yàn)樗萰ava.util.Random類要慢得多,只有在多線程環(huán)境下才能發(fā)揮其優(yōu)勢。此外,在使用ThreadLocalRandom類時(shí),也需要根據(jù)實(shí)際需要選擇合適的隨機(jī)數(shù)生成方法。