📅  最后修改于: 2023-12-03 15:31:34.489000             🧑  作者: Mango
Java语言提供了java.util.Random类用于生成随机值。但是在并发环境中,使用Random类可能会产生竞争条件,进而导致性能下降或者引发线程安全问题。为了解决这个问题,Java SE 7引入了ThreadLocalRandom类。
ThreadLocalRandom类提供了一种线程安全的、高效的随机数生成器。它是一个线程本地变量(Thread Local Variable),每个线程拥有自己的随机数生成器。因此,在并发环境下使用ThreadLocalRandom可以避免性能下降和线程安全问题。
ThreadLocalRandom类和Random类有些类似,都支持生成各种数据类型的随机数。但是在使用上有一些区别。
生成一个整数可以通过以下代码实现:
int randomInt = ThreadLocalRandom.current().nextInt();
这里使用了ThreadLocalRandom类的静态方法current()
来创建一个ThreadLocalRandom对象。接着,可以调用nextInt()
方法生成一个随机整数。
如果要生成一个指定范围内的随机整数,可以使用以下代码:
int randomIntInRange = ThreadLocalRandom.current().nextInt(min, max);
这里的min
和max
分别是指定范围的最小值和最大值。
生成一个浮点数可以通过以下代码实现:
double randomDouble = ThreadLocalRandom.current().nextDouble();
这里的nextDouble()
方法会生成一个介于0.0和1.0之间的浮点数。
如果要生成一个指定范围内的浮点数,可以使用以下代码:
double randomDoubleInRange = ThreadLocalRandom.current().nextDouble(min, max);
这里的min
和max
分别是指定范围的最小值和最大值。
生成一个布尔值可以通过以下代码实现:
boolean randomBoolean = ThreadLocalRandom.current().nextBoolean();
这里的nextBoolean()
方法会生成一个随机的布尔值,即true或false。
ThreadLocalRandom类提供了一种线程安全、高效的随机数生成器。在并发环境下使用ThreadLocalRandom可以避免性能下降和线程安全问题。在使用时需要注意,使用ThreadLocalRandom生成的随机数并不具有可预测性,不能用于安全相关的场景下。