public class ThreadLocalRandom extends Random
Math班采用全球
Random发生器,一个
ThreadLocalRandom与内部产生的种子,否则可能不修改初始化。适用时,使用
ThreadLocalRandom而不是共享
Random对象并发程序中通常会遇到很多的开销和竞争。使用
ThreadLocalRandom是适当的时候多任务(例如,每一个
ForkJoinTask)在线程池并联使用的随机数。
这类应用通常应形式:ThreadLocalRandom.current().nextX(...)(其中X是Int,Long,等)。当所有的习惯都是这种形式,它不可能无意中在多个线程共享ThreadLocalRandom。
这个类还提供了额外的常用的有界随机生成方法。
实例ThreadLocalRandom不加密的安全。考虑安全敏感的应用,而不是使用SecureRandom。另外,默认情况下不使用加密的随机种子除非system property java.util.secureRandomSeed设置true。
| Modifier and Type | Method and Description |
|---|---|
static ThreadLocalRandom |
current()
返回当前线程的
ThreadLocalRandom。
|
DoubleStream |
doubles()
返回值伪随机
double有效无限流,每个零之间(含)一(独家)。
|
DoubleStream |
doubles(double randomNumberOrigin, double randomNumberBound)
返回值伪随机
double有效无限流,每个符合给定的起源(含)和绑定(独家)。
|
DoubleStream |
doubles(long streamSize)
返回一个流生产特定的伪随机
double值
streamSize数,每个零之间(含)一(独家)。
|
DoubleStream |
doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
返回一个流生产特定的伪随机
double值
streamSize数,每个符合给定的起源(含)和绑定(独家)。
|
IntStream |
ints()
返回值伪随机
int有效无限流。
|
IntStream |
ints(int randomNumberOrigin, int randomNumberBound)
返回值伪随机
int有效无限流,每个符合给定的起源(含)和绑定(独家)。
|
IntStream |
ints(long streamSize)
返回一个流生产特定的伪随机
int值
streamSize数。
|
IntStream |
ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
返回一个流生产特定的伪随机
int值
streamSize数,每个符合给定的起源(含)和绑定(独家)。
|
LongStream |
longs()
返回值伪随机
long有效无限流。
|
LongStream |
longs(long streamSize)
返回一个流生产特定的伪随机
long值
streamSize数。
|
LongStream |
longs(long randomNumberOrigin, long randomNumberBound)
返回值伪随机
long有效无限流,每个符合给定的起源(含)和绑定(独家)。
|
LongStream |
longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
返回一个流生产特定的伪随机
long
streamSize数,每个符合给定的起源(含)和绑定(独家)。
|
protected int |
next(int bits)
生成下一个随机数。
|
boolean |
nextBoolean()
返回一个随机
boolean价值。
|
double |
nextDouble()
返回一个零之间的伪随机
double值(含)和一个(独家)。
|
double |
nextDouble(double bound)
返回一个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)
返回一个随机
long值之间的零(含)和指定的绑定(独家)。
|
long |
nextLong(long origin, long bound)
返回一个指定的起点之间的伪随机
long值(含)与指定的绑定(独家)。
|
void |
setSeed(long seed)
把
UnsupportedOperationException。
|
public static ThreadLocalRandom current()
ThreadLocalRandom。
ThreadLocalRandom
public void setSeed(long seed)
UnsupportedOperationException。不支持在该生成器中设置种子。
setSeed 方法重写,继承类
Random
seed -最初的种子
UnsupportedOperationException -永远
protected int next(int bits)
Random
对next一般合同,它返回一个int值,如果参数bits是1和32之间(含),然后,返回值将是许多低阶位(大约)自主选择的位值,分别是(大约)是0或1同样可能。该方法是通过类的next Random种子实现自动更新
(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)还
(int)(seed >>> (48 - bits))。这是一个线性同余伪随机数发生器,由D. H. Lehmer和Donald E. Knuth在计算机程序设计艺术,描述3卷:半数值算法,第3.2.1。
public int nextInt(int bound)
int值(含)与指定的绑定(独家)。
nextInt 方法重写,继承类
Random
bound -上限(独家)。必须是积极的。
int值(含)和束缚(独家)
IllegalArgumentException -如果
bound不积极
public int nextInt(int origin,
int bound)
int值(含)与指定的绑定(独家)。
origin -最小值返回
bound -上限(独家)
int起源价值(含)和束缚(独家)
IllegalArgumentException -如果
origin大于或等于
bound
public long nextLong(long bound)
long值(含)与指定的绑定(独家)。
bound -上限(独家)。必须是积极的。
long值(含)和束缚(独家)
IllegalArgumentException -如果
bound不积极
public long nextLong(long origin,
long bound)
long值(含)与指定的绑定(独家)。
origin -最小值返回
bound -上限(独家)
long起源价值(含)和束缚(独家)
IllegalArgumentException -如果
origin大于或等于
bound
public double nextDouble()
double值(含)和一个(独家)。
nextDouble 方法重写,继承类
Random
double价值(含)和一个(独家)
Math.random()
public double nextDouble(double bound)
double(含)和指定的绑定(独家)。
bound -上限(独家)。必须是积极的。
double值(含)和束缚(独家)
IllegalArgumentException -如果
bound不积极
public double nextDouble(double origin,
double bound)
double值(含)和绑定(独家)。
origin -最小值返回
bound -上限(独家)
double起源价值(含)和束缚(独家)
IllegalArgumentException -如果
origin大于或等于
bound
public boolean nextBoolean()
boolean价值。
nextBoolean 方法重写,继承类
Random
boolean价值
public float nextFloat()
float值(含)和一个(独家)。
public double nextGaussian()
Random
double均值和标准偏差值
0.0
1.0从这个随机数生成器的序列。
对nextGaussian总承包是一double值,选择从(大约)均值和标准差1.0 0.0通常的正态分布,是伪随机生成并返回。
该方法是通过类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;
}
}这使用E. P.盒,M. E. Muller的极坐标法和G. Marsaglia,就像Donald E. Knuth在计算机程序设计艺术,描述3卷:半数值算法,第3.4.1款C算法P.注意它产生两个独立的价值,在只有一个电话
StrictMath.log成本和一个叫
StrictMath.sqrt。
nextGaussian 方法重写,继承类
Random
double均值和标准偏差值
0.0
1.0从这个随机数生成器的序列
public IntStream ints(long streamSize)
int值
streamSize数。
ints 方法重写,继承类
Random
streamSize -数量值生成
int值
IllegalArgumentException -如果
streamSize小于零
public IntStream ints()
int有效无限流。
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
int值
streamSize数,每个符合给定的起源(含)和绑定(独家)。
ints 方法重写,继承类
Random
streamSize -数量值生成
randomNumberOrigin -起源(含)各随机值
randomNumberBound -束缚(独家)各随机值
int值,每个给定的起源(含)和绑定(独家)
IllegalArgumentException -如果
streamSize小于零,或者
randomNumberOrigin大于或等于
randomNumberBound
public IntStream ints(int randomNumberOrigin, int randomNumberBound)
int有效无限流,每个符合给定的起源(含)和绑定(独家)。
ints 方法重写,继承类
Random
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)。
randomNumberOrigin -起源(含)各随机值
randomNumberBound -束缚(独家)各随机值
int值,每个给定的起源(含)和绑定(独家)
IllegalArgumentException -如果
randomNumberOrigin大于或等于
randomNumberBound
public LongStream longs(long streamSize)
long值
streamSize数。
longs 方法重写,继承类
Random
streamSize -数量值生成
long值
IllegalArgumentException -如果
streamSize小于零
public LongStream longs()
long有效无限流。
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
long
streamSize数,每个符合给定的起源(含)和绑定(独家)。
longs 方法重写,继承类
Random
streamSize -数量值生成
randomNumberOrigin -起源(含)各随机值
randomNumberBound -束缚(独家)各随机值
long值,每个给定的起源(含)和绑定(独家)
IllegalArgumentException -如果
streamSize小于零,或者
randomNumberOrigin大于或等于
randomNumberBound
public LongStream longs(long randomNumberOrigin, long randomNumberBound)
long有效无限流,每个符合给定的起源(含)和绑定(独家)。
longs 方法重写,继承类
Random
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)。
randomNumberOrigin -起源(含)各随机值
randomNumberBound -束缚(独家)各随机值
long值,每个给定的起源(含)和绑定(独家)
IllegalArgumentException -如果
randomNumberOrigin大于或等于
randomNumberBound
public DoubleStream doubles(long streamSize)
double值
streamSize数,每个零之间(含)一(独家)。
doubles 方法重写,继承类
Random
streamSize -数量值生成
double值
IllegalArgumentException -如果
streamSize小于零
public DoubleStream doubles()
double有效无限流,每个零之间(含)一(独家)。
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
double值
streamSize数,每个符合给定的起源(含)和绑定(独家)。
doubles 方法重写,继承类
Random
streamSize -数量值生成
randomNumberOrigin -起源(含)各随机值
randomNumberBound -束缚(独家)各随机值
double值,每个给定的起源(含)和绑定(独家)
IllegalArgumentException -如果
streamSize小于零
IllegalArgumentException -如果
randomNumberOrigin大于或等于
randomNumberBound
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
double有效无限流,每个符合给定的起源(含)和绑定(独家)。
doubles 方法重写,继承类
Random
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)。
randomNumberOrigin -起源(含)各随机值
randomNumberBound -束缚(独家)各随机值
double值,每个给定的起源(含)和绑定(独家)
IllegalArgumentException -如果
randomNumberOrigin大于或等于
randomNumberBound
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.