java.lang.Object
java.util.Random
java.util.concurrent.ThreadLocalRandom
- 所有已实现的接口:
-
Serializable
,RandomGenerator
一个随机数生成器(周期为264),仅限于当前线程。类似于全局
Random
生成器,被Math
类使用,ThreadLocalRandom
使用内部生成的种子进行初始化,否则不可修改。在并发程序中,使用ThreadLocalRandom
而不是共享的Random
对象通常会遇到更少的开销和争用。当多个任务(例如,每个都是ForkJoinTask
)在线程池中并行使用随机数时,使用ThreadLocalRandom
特别合适。
此类的用法通常应该是这种形式:ThreadLocalRandom.current().nextX(...)
(其中X
是Int
、Long
等)。当所有用法都是这种形式时,永远不可能意外地在多个线程之间共享ThreadLocalRandom
。
此类还提供了额外常用的有界随机生成方法。
ThreadLocalRandom
的实例不具有密码安全性。在安全敏感的应用程序中,考虑使用SecureRandom
。此外,默认构造的实例不使用密码随机种子,除非将系统属性java.util.secureRandomSeed
设置为true
。
- 自 JDK 版本:
- 1.7
- 参见:
-
Nested Class Summary
Nested classes/interfaces declared in interface java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
-
Method Summary
Modifier and TypeMethodDescriptionstatic ThreadLocalRandom
current()
返回当前线程的ThreadLocalRandom
对象。doubles()
返回一个有效无限的伪随机double
值流,每个值介于零(包括)和一(不包括)之间。doubles
(double randomNumberOrigin, double randomNumberBound) 返回一个有效无限的伪随机double
值流,每个值符合给定的起始值(包括)和边界(不包括)。doubles
(long streamSize) 返回一个流,生成给定数量的伪随机double
值,每个值介于零(包括)和一(不包括)之间。doubles
(long streamSize, double randomNumberOrigin, double randomNumberBound) 返回一个流,生成给定数量的伪随机double
值,每个值符合给定的起始值(包括)和边界(不包括)。ints()
返回一个有效无限的伪随机int
值流。ints
(int randomNumberOrigin, int randomNumberBound) 返回一个有效无限的伪随机int
值流,每个值符合给定的起始值(包括)和边界(不包括)。ints
(long streamSize) 返回一个流,生成给定数量的伪随机int
值。ints
(long streamSize, int randomNumberOrigin, int randomNumberBound) 返回一个流,生成给定数量的伪随机int
值,每个值符合给定的起始值(包括)和边界(不包括)。longs()
返回一个有效无限的伪随机long
值流。longs
(long streamSize) 返回一个流,生成给定数量的伪随机long
值。longs
(long randomNumberOrigin, long randomNumberBound) 返回一个有效无限的伪随机long
值流,每个值符合给定的起始值(包括)和边界(不包括)。longs
(long streamSize, long randomNumberOrigin, long randomNumberBound) 返回一个流,生成给定数量的伪随机long
值,每个值符合给定的起始值(包括)和边界(不包括)。protected int
next
(int bits) 生成具有指定低位数的伪随机数。double
nextDouble
(double bound) 返回一个伪随机选择的介于零(包括)和指定边界(不包括)之间的double
值。double
nextDouble
(double origin, double bound) 返回一个伪随机选择的介于指定起始值(包括)和指定边界(不包括)之间的double
值。float
nextFloat
(float bound) 返回一个伪随机选择的介于零(包括)和指定边界(不包括)之间的float
值。float
nextFloat
(float origin, float bound) 返回一个伪随机选择的介于指定起始值(包括)和指定边界(不包括)之间的float
值。int
nextInt
(int bound) 返回一个伪随机、均匀分布的介于0(包括)和指定值(不包括)之间的int
值,从此随机数生成器的序列中抽取。int
nextInt
(int origin, int bound) 返回一个伪随机选择的介于指定起始值(包括)和指定边界(不包括)之间的int
值。long
nextLong
(long bound) 返回一个伪随机选择的介于零(包括)和指定边界(不包括)之间的long
值。long
nextLong
(long origin, long bound) 返回一个伪随机选择的介于指定起始值(包括)和指定边界(不包括)之间的long
值。void
setSeed
(long seed) 抛出UnsupportedOperationException
。Methods declared in class java.util.Random
from, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLong
Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods declared in interface java.util.random.RandomGenerator
isDeprecated, nextExponential, nextGaussian
-
Method Details
-
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) 返回一个伪随机、均匀分布的介于0(包括)和指定值(不包括)之间的int
值,从此随机数生成器的序列中抽取。方法nextInt
的一般约定是在指定范围内伪随机生成并返回一个int
值。所有可能的int
值都以(大约)相等的概率产生。- 指定者:
-
nextInt
在接口RandomGenerator
中 - 覆盖:
-
nextInt
在类Random
中 - 参数:
-
bound
- 上限(不包括)。必须为正数。 - 返回:
-
来自此随机数生成器序列的下一个伪随机、均匀分布的
int
值,介于零(包括)和bound
(不包括)之间 - 抛出:
-
IllegalArgumentException
- 如果bound
不是正数
-
nextInt
public int nextInt(int origin, int bound) 返回一个伪随机选择的介于指定起始值(包括)和指定边界(不包括)之间的int
值。- 参数:
-
origin
- 可返回的最小值 -
bound
- 返回值的上限(不包括) - 返回:
-
一个伪随机选择的介于起始值(包括)和边界(不包括)之间的
int
值 - 抛出:
-
IllegalArgumentException
- 如果origin
大于或等于bound
-
nextLong
public long nextLong(long bound) 返回一个伪随机选择的介于零(包括)和指定边界(不包括)之间的long
值。- 参数:
-
bound
- 返回值的上限(不包括)。必须为正数。 - 返回:
-
一个伪随机选择的介于零(包括)和边界(不包括)之间的
long
值 - 抛出:
-
IllegalArgumentException
- 如果bound
不是正数
-
nextLong
public long nextLong(long origin, long bound) 返回一个伪随机选择的介于指定起始值(包括)和指定边界(不包括)之间的long
值。- 参数:
-
origin
- 可返回的最小值 -
bound
- 返回值的上限(不包括) - 返回:
-
一个伪随机选择的介于起始值(包括)和边界(不包括)之间的
long
值 - 抛出:
-
IllegalArgumentException
- 如果origin
大于或等于bound
-
nextFloat
public float nextFloat(float bound) 返回一个伪随机选择的介于零(包括)和指定边界(不包括)之间的float
值。- 实现注意:
- 参数:
-
bound
- 返回值的上限(不包括)。必须为正数且有限 - 返回:
-
一个伪随机选择的介于零(包括)和边界(不包括)之间的
float
值 - 抛出:
-
IllegalArgumentException
- 如果bound
既不是正数也不是有限
-
nextFloat
public float nextFloat(float origin, float bound) 返回一个伪随机选择的介于指定起始值(包括)和指定边界(不包括)之间的float
值。- 实现注意事项:
- 参数:
-
origin
- 可返回的最小值 -
bound
- 上限(不包括) - 返回:
-
一个在原点(包括)和上限(不包括)之间选择的伪随机
float
值 - 抛出:
-
IllegalArgumentException
- 如果origin
不是有限的,或者bound
不是有限的,或者origin
大于或等于bound
-
nextDouble
public double nextDouble(double bound) 返回一个在零(包括)和指定上限(不包括)之间选择的伪随机double
值。- 实现注意事项:
- 参数:
-
bound
- 返回值的上限(不包括)。必须是正数且有限的 - 返回:
-
一个在零(包括)和上限(不包括)之间选择的伪随机
double
值 - 抛出:
-
IllegalArgumentException
- 如果bound
既不是正数也不是有限的
-
nextDouble
public double nextDouble(double origin, double bound) 返回一个在指定原点(包括)和指定上限(不包括)之间选择的伪随机double
值。- 实现注意事项:
- 参数:
-
origin
- 可返回的最小值 -
bound
- 返回值的上限(不包括) - 返回:
-
一个在原点(包括)和上限(不包括)之间选择的伪随机
double
值 - 抛出:
-
IllegalArgumentException
- 如果origin
不是有限的,或者bound
不是有限的,或者origin
大于或等于bound
-
ints
- 指定者:
-
ints
在接口RandomGenerator
- 覆盖:
-
ints
在类Random
- 参数:
-
streamSize
- 要生成的值的数量 - 返回:
-
一个伪随机
int
值的流 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零 - 自:
- 1.8
-
ints
返回一个有效无限的伪随机int
值的流。生成的伪随机
int
值就像调用方法Random.nextInt()
的结果一样。- 指定者:
-
ints
在接口RandomGenerator
- 覆盖:
-
ints
在类Random
- 实现注意事项:
-
此方法实现等效于
ints(Long.MAX_VALUE)
。 - 返回:
-
一个伪随机
int
值的流 - 自:
- 1.8
-
ints
返回一个生成给定streamSize
数量的伪随机int
值的流,每个值符合给定的原点(包括)和上限(不包括)。生成的伪随机
int
值就像调用以下方法与原点和上限的结果一样:int nextInt(int origin, int bound) { int n = bound - origin; if (n > 0) { return nextInt(n) + origin; } else { // 范围无法表示为int int r; do { r = nextInt(); } while (r < origin || r >= bound); return r; } }
- 指定者:
-
ints
在接口RandomGenerator
- 覆盖:
-
ints
在类Random
- 参数:
-
streamSize
- 要生成的值的数量 -
randomNumberOrigin
- 每个随机值的原点(包括) -
randomNumberBound
- 每个随机值的上限(不包括) - 返回:
-
一个伪随机
int
值的流,每个值具有给定的原点(包括)和上限(不包括) - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零,或者randomNumberOrigin
大于或等于randomNumberBound
- 自:
- 1.8
-
ints
返回一个有效无限的伪随机int
值的流,每个值符合给定的原点(包括)和上限(不包括)。生成的伪随机
int
值就像调用以下方法与原点和上限的结果一样:int nextInt(int origin, int bound) { int n = bound - origin; if (n > 0) { return nextInt(n) + origin; } else { // 范围无法表示为int int r; do { r = nextInt(); } while (r < origin || r >= bound); return r; } }
- 指定者:
-
ints
在接口RandomGenerator
- 覆盖:
-
ints
在类Random
- 实现注意事项:
-
此方法实现等效于
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
。 - 参数:
-
randomNumberOrigin
- 每个随机值的原点(包括) -
randomNumberBound
- 每个随机值的上限(不包括) - 返回:
-
一个伪随机
int
值的流,每个值具有给定的原点(包括)和上限(不包括) - 抛出:
-
IllegalArgumentException
- 如果randomNumberOrigin
大于或等于randomNumberBound
- 自:
- 1.8
-
longs
- 指定者:
-
longs
在接口RandomGenerator
- 覆盖:
-
longs
在类Random
- 参数:
-
streamSize
- 要生成的值的数量 - 返回:
-
一个伪随机
long
值的流 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零 - 自:
- 1.8
-
longs
返回一个有效无限的伪随机long
值的流。生成的伪随机
long
值就像调用方法Random.nextLong()
的结果一样。- 指定者:
-
longs
在接口RandomGenerator
- 覆盖:
-
longs
在类Random
- 实现注意事项:
-
此方法实现等效于
longs(Long.MAX_VALUE)
。 - 返回:
-
一个伪随机
long
值的流 - 自:
- 1.8
-
longs
返回一个生成给定streamSize
数量的伪随机long
值的流,每个值符合给定的原点(包括)和上限(不包括)。生成的伪随机
long
值就像调用以下方法与原点和上限的结果一样:long nextLong(long origin, long bound) { long r = nextLong(); long n = bound - origin, m = n - 1; if ((n & m) == 0L) // 2的幂 r = (r & m) + origin; else if (n > 0L) { // 拒绝过多的候选者 for (long u = r >>> 1; // 确保非负 u + m - (r = u % n) < 0L; // 拒绝检查 u = nextLong() >>> 1) // 重试 ; r += origin; } else { // 范围无法表示为long while (r < origin || r >= bound) r = nextLong(); } return r; }
- 指定者:
-
longs
在接口RandomGenerator
中 - 覆盖:
-
longs
在类Random
中 - 参数:
-
streamSize
- 要生成的值的数量 -
randomNumberOrigin
- 每个随机值的起始值(包含) -
randomNumberBound
- 每个随机值的上限(不包含) - 返回值:
-
一个伪随机
long
值流,每个值都具有给定的起始值(包含)和上限值(不包含) - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零,或randomNumberOrigin
大于或等于randomNumberBound
- 自版本:
- 1.8
-
longs
返回一个有效无限的伪随机long
值流,每个值都符合给定的起始值(包含)和上限值(不包含)。一个伪随机
long
值生成如同调用以下方法的结果,使用起始值和上限值:long nextLong(long origin, long bound) { long r = nextLong(); long n = bound - origin, m = n - 1; if ((n & m) == 0L) // 二的幂 r = (r & m) + origin; else if (n > 0L) { // 拒绝过多的候选值 for (long u = r >>> 1; // 确保非负 u + m - (r = u % n) < 0L; // 拒绝检查 u = nextLong() >>> 1) // 重试 ; r += origin; } else { // 范围无法表示为long while (r < origin || r >= bound) r = nextLong(); } return r; }
- 指定者:
-
longs
在接口RandomGenerator
中 - 覆盖:
-
longs
在类Random
中 - 实现注意:
-
此方法实现等效于
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
。 - 参数:
-
randomNumberOrigin
- 每个随机值的起始值(包含) -
randomNumberBound
- 每个随机值的上限(不包含) - 返回值:
-
一个伪随机
long
值流,每个值都具有给定的起始值(包含)和上限值(不包含) - 抛出:
-
IllegalArgumentException
- 如果randomNumberOrigin
大于或等于randomNumberBound
- 自版本:
- 1.8
-
doubles
- 指定者:
-
doubles
在接口RandomGenerator
中 - 覆盖:
-
doubles
在类Random
中 - 参数:
-
streamSize
- 要生成的值的数量 - 返回值:
-
一个
double
值流 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零 - 自版本:
- 1.8
-
doubles
返回一个有效无限的伪随机double
值流,每个值都介于零(包含)和一(不包含)之间。一个伪随机
double
值生成如同调用方法Random.nextDouble()
的结果。- 指定者:
-
doubles
在接口RandomGenerator
中 - 覆盖:
-
doubles
在类Random
中 - 实现注意:
-
此方法实现等效于
doubles(Long.MAX_VALUE)
。 - 返回值:
-
一个伪随机
double
值流 - 自版本:
- 1.8
-
doubles
返回一个生成给定streamSize
数量的伪随机double
值流,每个值都符合给定的起始值(包含)和上限值(不包含)。- 指定者:
-
doubles
在接口RandomGenerator
中 - 覆盖:
-
doubles
在类Random
中 - 参数:
-
streamSize
- 要生成的值的数量 -
randomNumberOrigin
- 每个随机值的起始值(包含) -
randomNumberBound
- 每个随机值的上限(不包含) - 返回值:
-
一个伪随机
double
值流,每个值都具有给定的起始值(包含)和上限值(不包含) - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零,或randomNumberOrigin
不是有限的,或randomNumberBound
不是有限的,或randomNumberOrigin
大于或等于randomNumberBound
- 自版本:
- 1.8
-
doubles
返回一个有效无限的伪随机double
值流,每个值都符合给定的起始值(包含)和上限值(不包含)。- 指定者:
-
doubles
在接口RandomGenerator
中 - 覆盖:
-
doubles
在类Random
中 - 实现注意:
-
此方法实现等效于
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
。 - 参数:
-
randomNumberOrigin
- 每个随机值的起始值(包含) -
randomNumberBound
- 每个随机值的上限(不包含) - 返回值:
-
一个伪随机
double
值流,每个值都具有给定的起始值(包含)和上限值(不包含) - 抛出:
-
IllegalArgumentException
- 如果randomNumberOrigin
不是有限的,或randomNumberBound
不是有限的,或randomNumberOrigin
大于或等于randomNumberBound
- 自版本:
- 1.8
-