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.