- 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 ThreadLocalRandom
current()
返回当前线程的ThreadLocalRandom
。DoubleStream
doubles()
返回一个有效的无限流的伪随机数double
值,每个值在零(包括)和一(独占)之间。DoubleStream
doubles(double randomNumberOrigin, double randomNumberBound)
返回一个有效的无限流的伪随机数double
值,每个符合给定的起始(包括)和绑定(排他)。DoubleStream
doubles(long streamSize)
返回一个流,产生给定的streamSize
伪随机数double
数值,每个值在零(包括)和一(独占)之间。DoubleStream
doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
返回一个流,产生给定的streamSize
伪随机数double
值,每个值符合给定的起始(包括)和绑定(排他)。IntStream
ints()
返回一个有效的无限流的伪随机数int
值。IntStream
ints(int randomNumberOrigin, int randomNumberBound)
返回一个有效无限流的伪随机数int
,每个值都符合给定的起始(包括)和绑定(排除)。IntStream
ints(long streamSize)
返回一个流,产生给定的streamSize
数量的伪随机数int
值。IntStream
ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
返回一个流,产生给定的streamSize
数量的伪随机数int
值,每个符合给定的起始(包括)和绑定(排他)。LongStream
longs()
返回一个有效的无限流的伪随机数long
值。LongStream
longs(long streamSize)
返回一个流,产生给定的streamSize
数量的伪随机数long
值。LongStream
longs(long randomNumberOrigin, long randomNumberBound)
返回一个有效的无限流的伪随机数long
值,每个符合给定的起始(包括)和绑定(排他)。LongStream
longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
返回产生所述给定流streamSize
数的伪随机的long
,每个符合给定的原点(含)和结合(不包括)。protected int
next(int bits)
生成带有指定数量的低位位的伪随机数。boolean
nextBoolean()
返回一个伪随机值boolean
。double
nextDouble()
返回0(包括)和1(排除)之间的伪随机值double
。double
nextDouble(double bound)
返回值在0.0(含)之间的伪随机数double
和指定的约束(排除)之间。double
nextDouble(double origin, double bound)
返回指定原点(包括)和绑定(排除)之间的伪随机值double
。float
nextFloat()
返回在零(包括)和一(独占)之间的伪随机float
值。double
nextGaussian()
从该随机数发生器的序列返回下一个伪随机,高斯(“正”)分布的double
值,平均值为0.0
,标准偏差为1.0
。int
nextInt()
返回一个伪随机值int
。int
nextInt(int bound)
返回零(含)和指定边界(排除)之间的伪随机值int
。int
nextInt(int origin, int bound)
返回指定的起始(含)和指定的界限(排除)之间的伪随机值int
。long
nextLong()
返回一个伪随机数long
值。long
nextLong(long bound)
返回0(包括)和指定的bound(exclusive)之间的伪随机值long
。long
nextLong(long origin, long bound)
返回指定原点(含)和指定边界(独占)之间的伪随机数long
值。void
setSeed(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
实现,如同通过以下的线程安全版本一样: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
-
-