public class ThreadLocalRandom extends Random
Math
クラスによって使用されるグローバルなRandom
ジェネレータと同様に、ThreadLocalRandom
は、それ以外では変更できない内部的に生成されたシードで初期化されます。 該当する場合、並行プログラム内の共有されたRandom
オブジェクトではなくThreadLocalRandom
を使用すれば、通常、発生するオーバーヘッドや競合がはるかに少なくなります。 ThreadLocalRandom
の使用は、複数のタスク(たとえば、各ForkJoinTask
)がスレッド・プール内で並列に乱数を使用している場合に特に適しています。
このクラスの使用法は通常、ThreadLocalRandom.current().nextX(...)
(ここで、X
はInt
やLong
など)の形式にするようにしてください。 すべての使用法がこの形式になっていれば、ThreadLocalRandom
が複数のスレッド間で誤って共有されることはありえません。
このクラスはまた、追加の一般的に使用される制約付きランダム生成メソッドも提供します。
ThreadLocalRandom
のインスタンスにはセキュアな暗号化が施されていません。 セキュリティに依存するアプリケーションでは、かわりにSecureRandom
の使用を検討してください。 また、システム・プロパティjava.util.secureRandomSeed
をtrue
に設定しないかぎり、デフォルトで構築されるインスタンスは暗号化処理に乱数シードを使用しません。
修飾子と型 | メソッド | 説明 |
---|---|---|
static ThreadLocalRandom |
current() |
現在のスレッドの
ThreadLocalRandom を返します。 |
DoubleStream |
doubles() |
0(含む)から1(含まない)までの擬似乱数
double 値を含む事実上無限のストリームを返します。 |
DoubleStream |
doubles(double randomNumberOrigin, double randomNumberBound) |
指定された起点(含む)と境界(含まない)に準拠した擬似乱数
double 値を含む事実上無限のストリームを返します。 |
DoubleStream |
doubles(long streamSize) |
0(含む)から1(含まない)までの擬似乱数
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() |
0(これを含む)から1(これを含まない)までの範囲で、擬似乱数の
double 値を返します。 |
double |
nextDouble(double bound) |
0.0(これを含む)から指定された限界(これを含まない)までの範囲で、擬似乱数の
double 値を返します。 |
double |
nextDouble(double origin, double bound) |
指定された起点(これを含む)から限界(これを含まない)までの範囲で、擬似乱数の
double 値を返します。 |
float |
nextFloat() |
0(これを含む)から1(これを含まない)までの範囲で、擬似乱数の
float 値を返します。 |
double |
nextGaussian() |
この乱数ジェネレータのシーケンスを使って、平均
0.0 、標準偏差1.0 のガウス(「正規」)分布のdouble 型の擬似乱数値を返します。 |
int |
nextInt() |
擬似乱数の
int 値を返します。 |
int |
nextInt(int bound) |
0(これを含む)から指定された限界(これを含まない)までの範囲で、擬似乱数の
int 値を返します。 |
int |
nextInt(int origin, int bound) |
指定された起点(これを含む)から指定された限界(これを含まない)までの範囲で、擬似乱数の
int 値を返します。 |
long |
nextLong() |
擬似乱数の
long 値を返します。 |
long |
nextLong(long bound) |
0(これを含む)から指定された限界(これを含まない)までの範囲で、擬似乱数の
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
(1と32を含む)の範囲の場合は、戻り値の多くの下位ビットが(ほぼ)独立に選択されたビット値になり、それぞれの値は(ほぼ)均等に0
または1
になります。 Random
クラスによるnext
メソッドの実装では、シードを次のように原始的に更新します。
(seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1)
に原始的に更新し、次の値を返します。
(int)(seed >>> (48 - bits))
.
これは、D. H. Lehmerによって定義された、線形合同擬似乱数ジェネレータです。 詳細はDonald Knuth著『The Art of Computer Programming, Volume 3: Seminumerical Algorithms』のセクション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
0.0
、標準偏差1.0
のガウス(「正規」)分布のdouble
型の擬似乱数値を返します。
nextGaussian
の一般規約では、平均0.0
、標準偏差1.0
のほぼ通常の正規分布から選択された1つのdouble
値が、擬似乱数として生成されて返されます。
Random
クラスによるnextGaussian
メソッドの実装は、次のスレッド・セーフなバージョンと同等です。
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;
}
}
polar methodを使用します - これは、G. E. P. Box、M. E. Muller、およびG. Marsaglia、Donald E. Knuth著『The Art of Computer Programming』第3巻『Seminumerical Algorithms』のセクション3.4.1のC、アルゴリズムPで説明されています。 StrictMath.log
とStrictMath.sqrt
の1回ずつの呼び出しだけで2つの別々の値を生成することに注意してください。 nextGaussian
、クラスRandom
0.0
、標準偏差1.0
のガウス(「正規」)分布のdouble
型の次の擬似乱数値public IntStream ints(long streamSize)
int
値をstreamSize
に指定された数だけ生成するストリームを返します。ints
、クラスRandom
streamSize
- 生成する値の数int
値のストリームIllegalArgumentException
- streamSize
が0より小さい場合public IntStream ints()
int
値を含む事実上無限のストリームを返します。public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
int
値をstreamSize
に指定された数だけ生成するストリームを返します。ints
、クラスRandom
streamSize
- 生成する値の数randomNumberOrigin
- 各乱数値の起点(これを含む)randomNumberBound
- 各乱数値の限界(これを含まない)int
値のストリームIllegalArgumentException
- streamSize
が0より小さい場合、または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
が0より小さい場合public LongStream longs()
long
値を含む事実上無限のストリームを返します。public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
long
をstreamSize
に指定された数だけ生成するストリームを返します。longs
、クラスRandom
streamSize
- 生成する値の数randomNumberOrigin
- 各乱数値の起点(これを含む)randomNumberBound
- 各乱数値の限界(これを含まない)long
値のストリームIllegalArgumentException
- streamSize
が0より小さい場合、または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
が0より小さい場合public DoubleStream doubles()
double
値を含む事実上無限のストリームを返します。public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
double
値を、streamSize
に指定された数だけ生成するストリームを返します。doubles
、クラスRandom
streamSize
- 生成する値の数randomNumberOrigin
- 各乱数値の起点(これを含む)randomNumberBound
- 各乱数値の限界(これを含まない)double
値のストリームIllegalArgumentException
- streamSize
が0より小さい場合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
より大きいか等しい場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。