- java.lang.Object
-
- java.util.Random
-
- java.util.concurrent.ThreadLocalRandom
-
- All Implemented Interfaces:
-
Serializable
public class ThreadLocalRandom extends Random
与当前线程隔离的随机数生成器。 像Math类使用的全局Random发生器一样,ThreadLocalRandom用内部生成的种子进行初始化,可能不会被修改。 适用时,在并发程序中使用ThreadLocalRandom而不是共享的Random对象通常会遇到更少的开销和争用。 当多个任务(例如,每个ForkJoinTask)在线程池中并行使用随机数时,使用ThreadLocalRandom是特别合适的。这个类的用途通常应该是这样的形式:
ThreadLocalRandom.current().nextX(...)(其中X是Int,Long等)。 当所有用法都是这种形式时,绝对不可能跨多个线程共享一个ThreadLocalRandom。该类还提供了其他常用的有界随机生成方法。
ThreadLocalRandom实例不是加密安全的。 考虑在安全敏感的应用程序中使用SecureRandom。 此外,除非默认构造的情况下,不使用加密的随机种子system propertyjava.util.secureRandomSeed设置为true。- 从以下版本开始:
- 1.7
- 另请参见:
- Serialized Form
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 static ThreadLocalRandomcurrent()返回当前线程的ThreadLocalRandom。DoubleStreamdoubles()返回一个有效的无限流的伪随机数double值,每个值在零(包括)和一(独占)之间。DoubleStreamdoubles(double randomNumberOrigin, double randomNumberBound)返回一个有效的无限流的伪随机数double值,每个符合给定的起始(包括)和绑定(排他)。DoubleStreamdoubles(long streamSize)返回一个流,产生给定的streamSize伪随机数double数值,每个值在零(包括)和一(独占)之间。DoubleStreamdoubles(long streamSize, double randomNumberOrigin, double randomNumberBound)返回一个流,产生给定的streamSize伪随机数double值,每个值符合给定的起始(包括)和绑定(排他)。IntStreamints()返回一个有效的无限流的伪随机数int值。IntStreamints(int randomNumberOrigin, int randomNumberBound)返回一个有效无限流的伪随机数int,每个值都符合给定的起始(包括)和绑定(排除)。IntStreamints(long streamSize)返回一个流,产生给定的streamSize数量的伪随机数int值。IntStreamints(long streamSize, int randomNumberOrigin, int randomNumberBound)返回一个流,产生给定的streamSize数量的伪随机数int值,每个符合给定的起始(包括)和绑定(排他)。LongStreamlongs()返回一个有效的无限流的伪随机数long值。LongStreamlongs(long streamSize)返回一个流,产生给定的streamSize数量的伪随机数long值。LongStreamlongs(long randomNumberOrigin, long randomNumberBound)返回一个有效的无限流的伪随机数long值,每个符合给定的起始(包括)和绑定(排他)。LongStreamlongs(long streamSize, long randomNumberOrigin, long randomNumberBound)返回产生所述给定流streamSize数的伪随机的long,每个符合给定的原点(含)和结合(不包括)。protected intnext(int bits)生成带有指定数量的低位位的伪随机数。booleannextBoolean()返回一个伪随机值boolean。doublenextDouble()返回0(包括)和1(排除)之间的伪随机值double。doublenextDouble(double bound)返回值在0.0(含)之间的伪随机数double和指定的约束(排除)之间。doublenextDouble(double origin, double bound)返回指定原点(包括)和绑定(排除)之间的伪随机值double。floatnextFloat()返回在零(包括)和一(独占)之间的伪随机float值。doublenextGaussian()从该随机数发生器的序列返回下一个伪随机,高斯(“正”)分布的double值,平均值为0.0,标准偏差为1.0。intnextInt()返回一个伪随机值int。intnextInt(int bound)返回零(含)和指定边界(排除)之间的伪随机值int。intnextInt(int origin, int bound)返回指定的起始(含)和指定的界限(排除)之间的伪随机值int。longnextLong()返回一个伪随机数long值。longnextLong(long bound)返回0(包括)和指定的bound(exclusive)之间的伪随机值long。longnextLong(long origin, long bound)返回指定原点(含)和指定边界(独占)之间的伪随机数long值。voidsetSeed(long seed)投掷UnsupportedOperationException。
-
-
-
方法详细信息
-
current
public static ThreadLocalRandom current()
返回当前线程的ThreadLocalRandom。- 结果
-
当前线程的
ThreadLocalRandom
-
setSeed
public void setSeed(long seed)
投掷UnsupportedOperationException。 不支持在此生成器中设置种子。- 重写:
-
setSeed在Random - 参数
-
seed- 初始种子 - 异常
-
UnsupportedOperationException- 永远
-
next
protected int next(int bits)
生成带有指定数量的低位位的伪随机数。 因为此类没有子类,所以无法调用或覆盖此方法。
-
nextInt
public int nextInt(int bound)
返回零(含)和指定边界(排除)之间的伪随机值int。- 重写:
-
nextInt在Random - 参数
-
bound- 上限(独占)。 必须是积极的。 - 结果
-
零(包括)和绑定(独占)之间的伪随机值
int - 异常
-
IllegalArgumentException- 如果bound
-
nextInt
public int nextInt(int origin, int bound)返回指定原点(含)和指定边界(排除)之间的伪随机值int。- 参数
-
origin- 返回的值最小 -
bound- 上限(独占) - 结果
-
原始(含)和绑定(排他性)之间的伪随机
int值 - 异常
-
IllegalArgumentException- 如果origin大于或等于bound
-
nextLong
public long nextLong(long bound)
返回0(包括)和指定的bound(exclusive)之间的伪随机值long。- 参数
-
bound- 上限(独占)。 必须是积极的。 - 结果
-
一个伪随机
long(long在零(包括)和绑定(排除)之间的值 - 异常
-
IllegalArgumentException- 如果bound
-
nextLong
public long nextLong(long origin, long bound)返回指定的起始点(含)和指定的边界(排除)之间的伪随机值long。- 参数
-
origin- 返回的值最小 -
bound- 上限(独占) - 结果
-
原始(含)和绑定(排他性)之间的伪随机
long值 - 异常
-
IllegalArgumentException- 如果origin大于或等于bound
-
nextDouble
public double nextDouble()
返回0(包括)和1(独占)之间的伪随机值double。- 重写:
-
nextDouble在Random - 结果
-
零(含)和一(独占)之间的伪随机
double值 - 另请参见:
-
Math.random()
-
nextDouble
public double nextDouble(double bound)
返回值在0.0(含)和指定的约束(排除)之间的伪随机数double。- 参数
-
bound- 上限(独占)。 必须是积极的。 - 结果
-
零(包括)和绑定(排他性)之间的伪随机
double值 - 异常
-
IllegalArgumentException- 如果bound
-
nextDouble
public double nextDouble(double origin, double bound)返回指定的起始(含)和绑定(排除)之间的伪随机值double。- 参数
-
origin- 返回的最小值 -
bound- 上限(独占) - 结果
-
原始(含)和限制(排除)之间的伪随机值
double - 异常
-
IllegalArgumentException- 如果origin大于或等于bound
-
nextBoolean
public boolean nextBoolean()
返回一个伪随机值boolean。- 重写:
-
nextBoolean在Random - 结果
-
一个伪随机数
boolean
-
nextFloat
public float nextFloat()
返回零(含)和一(独占)之间的伪随机数float。
-
nextGaussian
public double nextGaussian()
描述从类别复制Random从该随机数发生器的序列返回下一个伪随机,高斯(“正”)分布的double值,平均值为0.0,标准差为1.0。nextGaussian的一般合同是从(大约)平均0.0和标准差1.0的常规正态分布中选出的一个double值被伪随机生成并返回。方法
nextGaussian由类Random实现,如同通过以下的线程安全版本一样:这使用GEP Box,ME Muller和G. Marsaglia的极性方法 ,如Donald E. Knuth在“计算机编程艺术”第2卷: Seminumerical Algorithms ,第3.4.1节,C节,算法P中所述。请注意它产生两个独立的值,其代价是只有一个呼叫为private double nextNextGaussian; private boolean haveNextNextGaussian = false; public double nextGaussian() { if (haveNextNextGaussian) { haveNextNextGaussian = false; return nextNextGaussian; } else { double v1, v2, s; do { v1 = 2 * nextDouble() - 1; // between -1.0 and 1.0 v2 = 2 * nextDouble() - 1; // between -1.0 and 1.0 s = v1 * v1 + v2 * v2; } while (s >= 1 || s == 0); double multiplier = StrictMath.sqrt(-2 * StrictMath.log(s)/s); nextNextGaussian = v2 * multiplier; haveNextNextGaussian = true; return v1 * multiplier; } }StrictMath.log,一个呼叫为StrictMath.sqrt。- 重写:
-
nextGaussian在Random - 结果
-
下一个伪随机数,高斯(“正常”)分布
double值,平均值为0.0,标准偏差为1.0来自该随机数发生器的序列
-
ints
public IntStream ints(long streamSize)
返回一个流,产生给定的streamSize伪随机数int值。- 重写:
-
ints在Random - 参数
-
streamSize- 要生成的值的数量 - 结果
-
一串伪随机数
int - 异常
-
IllegalArgumentException- 如果streamSize小于零 - 从以下版本开始:
- 1.8
-
ints
public IntStream ints()
返回一个有效的无限流的伪随机数int值。
-
ints
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
返回一个流,产生给定的streamSize伪随机数int值,每个值符合给定的起始(包括)和绑定(排他)。- 重写:
-
ints在Random - 参数
-
streamSize- 要生成的值的数量 -
randomNumberOrigin- 每个随机值的起点(含) -
randomNumberBound- 每个随机值的绑定(排他) - 结果
-
一个伪随机数
int值,每个具有给定的起始(包括)和绑定(排他) - 异常
-
IllegalArgumentException- 如果streamSize小于零,或randomNumberOrigin大于或等于randomNumberBound - 从以下版本开始:
- 1.8
-
ints
public IntStream ints(int randomNumberOrigin, int randomNumberBound)
返回一个有效无限流的伪随机数int值,每个符合给定的起始(包括)和绑定(排他)。- 重写:
-
ints在Random - Implementation Note:
-
该方法实现等同于
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)。 - 参数
-
randomNumberOrigin- 每个随机值的起点(含) -
randomNumberBound- 每个随机值的绑定(排他) - 结果
-
一个伪随机
int,int,每个都有给定的来源(包括)和绑定(排他) - 异常
-
IllegalArgumentException- 如果randomNumberOrigin大于或等于randomNumberBound - 从以下版本开始:
- 1.8
-
longs
public LongStream longs(long streamSize)
返回一个流,产生给定的streamSize伪随机数long数值。- 重写:
-
longs在Random - 参数
-
streamSize- 要生成的值的数量 - 结果
-
一串伪随机数
long - 异常
-
IllegalArgumentException- 如果streamSize小于零 - 从以下版本开始:
- 1.8
-
longs
public LongStream longs()
返回一个有效的无限流的伪随机数long值。
-
longs
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
返回一个流,产生给定的streamSize伪随机数long,每个符合给定的起始(包括)和绑定(排他)。- 重写:
-
longs在Random - 参数
-
streamSize- 要生成的值的数量 -
randomNumberOrigin- 每个随机值的起始(含) -
randomNumberBound- 每个随机值的绑定(排他) - 结果
-
一个伪随机的
long,每个都有给定的来源(包括)和绑定(排他) - 异常
-
IllegalArgumentException- 如果streamSize小于零,或randomNumberOrigin大于或等于randomNumberBound - 从以下版本开始:
- 1.8
-
longs
public LongStream longs(long randomNumberOrigin, long randomNumberBound)
返回一个有效的无限流的伪随机数long值,每个符合给定的起始(包括)和绑定(排他)。- 重写:
-
longs在Random - Implementation Note:
-
该方法实现为等同于
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)。 - 参数
-
randomNumberOrigin- 每个随机值的起点(含) -
randomNumberBound- 每个随机值的绑定(排他) - 结果
-
一个伪随机数
long,每个都有给定的来源(包括)和绑定(排他) - 异常
-
IllegalArgumentException- 如果randomNumberOrigin大于或等于randomNumberBound - 从以下版本开始:
- 1.8
-
doubles
public DoubleStream doubles(long streamSize)
返回一个流,产生给定的streamSize数量的伪随机数double值,每个值在零(包括)和一(独占)之间。- 重写:
-
doubles在Random - 参数
-
streamSize- 要生成的值的数量 - 结果
-
一串
double值 - 异常
-
IllegalArgumentException- 如果streamSize小于零 - 从以下版本开始:
- 1.8
-
doubles
public DoubleStream doubles()
返回一个有效的无限流伪随机数double值,每个值在零(包括)和一(独占)之间。
-
doubles
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
返回一个流,产生给定的streamSize伪随机数double值,每个值符合给定的起始(包括)和绑定(排他)。- 重写:
-
doubles在Random - 参数
-
streamSize- 要生成的值的数量 -
randomNumberOrigin- 每个随机值的起点(含) -
randomNumberBound- 每个随机值的绑定(排他) - 结果
-
一个伪随机数(
double,每个都有给定的来源(包括)和绑定(排他) - 异常
-
IllegalArgumentException- 如果streamSize小于零,或randomNumberOrigin大于或等于randomNumberBound - 从以下版本开始:
- 1.8
-
doubles
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
返回一个有效的无限流的伪随机数double,每个符合给定的起始(包括)和绑定(排他)。- 重写:
-
doubles在Random - Implementation Note:
-
该方法实现为等同于
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)。 - 参数
-
randomNumberOrigin- 每个随机值的起点(含) -
randomNumberBound- 每个随机值的绑定(排他) - 结果
-
一个伪随机数
double,每个都有给定的来源(包括)和绑定(排他) - 异常
-
IllegalArgumentException- 如果randomNumberOrigin大于或等于randomNumberBound - 从以下版本开始:
- 1.8
-
-