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を返します。ThreadLocalRandompublic void setSeed(long seed)
UnsupportedOperationExceptionをスローします。 このジェネレータでのシードの設定はサポートされていません。 setSeed、クラスRandomseed - 初期シードUnsupportedOperationException - 常時protected int next(int bits)
Randomnextの一般規約では、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、クラスRandombound - 上限(含まない)。 正の値でなければならない。 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、クラスRandomdouble値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、クラスRandomboolean値public float nextFloat()
float値を返します。public double nextGaussian()
Random0.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、クラスRandom0.0、標準偏差1.0のガウス(「正規」)分布のdouble型の次の擬似乱数値public IntStream ints(long streamSize)
int値をstreamSizeに指定された数だけ生成するストリームを返します。ints、クラスRandomstreamSize - 生成する値の数int値のストリームIllegalArgumentException - streamSizeが0より小さい場合public IntStream ints()
int値を含む事実上無限のストリームを返します。public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
int値をstreamSizeに指定された数だけ生成するストリームを返します。ints、クラスRandomstreamSize - 生成する値の数randomNumberOrigin - 各乱数値の起点(これを含む)randomNumberBound - 各乱数値の限界(これを含まない)int値のストリームIllegalArgumentException - streamSizeが0より小さい場合、またはrandomNumberOriginがrandomNumberBoundより大きいか等しい場合public IntStream ints(int randomNumberOrigin, int randomNumberBound)
int値を含む、事実上無限のストリームを返します。ints、クラスRandomints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)と同等であるように実装されています。randomNumberOrigin - 各乱数値の起点(これを含む)randomNumberBound - 各乱数値の限界(これを含まない)int値のストリームIllegalArgumentException - randomNumberOriginがrandomNumberBoundより大きいか等しい場合public LongStream longs(long streamSize)
long値をstreamSizeに指定された数だけ生成するストリームを返します。longs、クラスRandomstreamSize - 生成する値の数long値のストリームIllegalArgumentException - streamSizeが0より小さい場合public LongStream longs()
long値を含む事実上無限のストリームを返します。public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
longをstreamSizeに指定された数だけ生成するストリームを返します。longs、クラスRandomstreamSize - 生成する値の数randomNumberOrigin - 各乱数値の起点(これを含む)randomNumberBound - 各乱数値の限界(これを含まない)long値のストリームIllegalArgumentException - streamSizeが0より小さい場合、またはrandomNumberOriginがrandomNumberBoundより大きいか等しい場合public LongStream longs(long randomNumberOrigin, long randomNumberBound)
long値を含む、事実上無限のストリームを返します。longs、クラスRandomlongs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)と同等であるように実装されています。randomNumberOrigin - 各乱数値の起点(これを含む)randomNumberBound - 各乱数値の限界(これを含まない)long値のストリームIllegalArgumentException - randomNumberOriginがrandomNumberBoundより大きいか等しい場合public DoubleStream doubles(long streamSize)
double値を、streamSizeに指定された数だけ生成するストリームを返します。doubles、クラスRandomstreamSize - 生成する値の数double値のストリームIllegalArgumentException - streamSizeが0より小さい場合public DoubleStream doubles()
double値を含む事実上無限のストリームを返します。public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
double値を、streamSizeに指定された数だけ生成するストリームを返します。doubles、クラスRandomstreamSize - 生成する値の数randomNumberOrigin - 各乱数値の起点(これを含む)randomNumberBound - 各乱数値の限界(これを含まない)double値のストリームIllegalArgumentException - streamSizeが0より小さい場合IllegalArgumentException - randomNumberOriginがrandomNumberBoundより大きいか等しい場合public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
double値を含む事実上無限のストリームを返します。doubles、クラスRandomdoubles(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も参照してください。