java.lang.Object
java.util.Random
java.util.concurrent.ThreadLocalRandom
- 所有已实现的接口:
Serializable,RandomGenerator
随机数生成器(周期为 264隔离到当前线程。与
Math 类使用的全局 Random 生成器一样,ThreadLocalRandom 是使用内部生成的种子初始化的,否则可能无法修改。适用时,在并发程序中使用 ThreadLocalRandom 而不是共享 Random 对象通常会遇到更少的开销和争用。当多个任务(例如,每个一个 ForkJoinTask )在线程池中并行使用随机数时,使用 ThreadLocalRandom 特别合适。
此类的用法通常应采用以下形式:ThreadLocalRandom.current().nextX(...)(其中 X 是 Int、Long 等)。当所有用法都是这种形式时,就永远不可能在多个线程之间意外共享一个 ThreadLocalRandom。
此类还提供了其他常用的有界随机生成方法。
ThreadLocalRandom 的实例不是加密安全的。考虑在对安全敏感的应用程序中使用 SecureRandom 。此外,默认构造的实例不使用加密随机种子,除非 系统属性 java.util.secureRandomSeed 设置为 true。
- 自从:
- 1.7
- 参见:
-
内部类总结
-
方法总结
修饰符和类型方法描述static ThreadLocalRandomcurrent()返回当前线程的ThreadLocalRandom对象。doubles()返回有效无限的伪随机double值流,每个值介于零(含)和一(不含)之间。doubles(double randomNumberOrigin, double randomNumberBound) 返回一个有效的无限流伪随机double值,每个值都符合给定的原点(包括)和边界(不包括)。doubles(long streamSize) 返回产生给定streamSize个伪随机数double值的流,每个值介于零(含)和一(不含)之间。doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) 返回产生给定streamSize伪随机数double值的流,每个值都符合给定的原点(包括)和边界(不包括)。ints()返回有效无限的伪随机int值流。ints(int randomNumberOrigin, int randomNumberBound) 返回一个有效的无限流伪随机int值,每个值都符合给定的原点(包括)和边界(不包括)。ints(long streamSize) 返回产生给定streamSize个伪随机数int值的流。ints(long streamSize, int randomNumberOrigin, int randomNumberBound) 返回产生给定streamSize伪随机数int值的流,每个值都符合给定的原点(包括)和边界(不包括)。longs()返回有效无限的伪随机long值流。longs(long streamSize) 返回产生给定streamSize个伪随机数long值的流。longs(long randomNumberOrigin, long randomNumberBound) 返回一个有效的无限流伪随机long值,每个值都符合给定的原点(包括)和边界(不包括)。longs(long streamSize, long randomNumberOrigin, long randomNumberBound) 返回产生给定streamSize伪随机数long的流,每个都符合给定的原点(包括)和边界(不包括)。protected intnext(int bits) 生成具有指示的低位位数的伪随机数。doublenextDouble(double bound) 返回介于零(含)和指定界限(不含)之间的伪随机选择的double值。doublenextDouble(double origin, double bound) 返回指定原点(含)和指定边界(不含)之间伪随机选择的double值。floatnextFloat(float bound) 返回介于零(含)和指定界限(不含)之间的伪随机选择的float值。floatnextFloat(float origin, float bound) 返回指定原点(含)和指定边界(不含)之间伪随机选择的float值。intnextInt(int bound) 返回从该随机数生成器的序列中提取的伪随机、均匀分布的int值,介于 0(含)和指定值(不含)之间。intnextInt(int origin, int bound) 返回指定原点(含)和指定边界(不含)之间伪随机选择的int值。longnextLong(long bound) 返回介于零(含)和指定界限(不含)之间的伪随机选择的long值。longnextLong(long origin, long bound) 返回指定原点(含)和指定边界(不含)之间伪随机选择的long值。voidsetSeed(long seed) 抛出UnsupportedOperationException。在类 java.util.Random 中声明的方法
from, nextBoolean, nextBytes, nextDouble, nextFloat, nextGaussian, nextInt, nextLong在类 java.lang.Object 中声明的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait在接口 java.util.random.RandomGenerator 中声明的方法
isDeprecated, nextExponential, nextGaussian
-
方法详情
-
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值,介于 0(含)和指定值(不含)之间。nextInt的一般契约是伪随机生成并返回指定范围内的一个int值。所有bound可能的int值都是以(近似)相等的概率产生的。- 指定者:
nextInt在接口RandomGenerator中- 重写:
nextInt在类Random中- 参数:
bound- 上限(不包括)。必须是积极的。- 返回:
-
下一个伪随机数,均匀分布的
int值介于零(含)和bound(不含)之间,来自该随机数生成器的序列 - 抛出:
IllegalArgumentException- 如果绑定不是正数
-
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 { // range not representable as 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 { // range not representable as 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) // power of two r = (r & m) + origin; else if (n > 0L) { // reject over-represented candidates for (long u = r >>> 1; // ensure nonnegative u + m - (r = u % n) < 0L; // rejection check u = nextLong() >>> 1) // retry ; r += origin; } else { // range not representable as 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) // power of two r = (r & m) + origin; else if (n > 0L) { // reject over-represented candidates for (long u = r >>> 1; // ensure nonnegative u + m - (r = u % n) < 0L; // rejection check u = nextLong() >>> 1) // retry ; r += origin; } else { // range not representable as 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
返回产生给定streamSize个伪随机数double值的流,每个值介于零(含)和一(不含)之间。生成伪随机值
double就好像它是调用方法Random.nextDouble()的结果一样。- 指定者:
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
-