Java 乱数ジェネレーター
インタラクティブなコード例でJavaでの乱数生成を学びましょう。Random.nextInt()、SecureRandom、ThreadLocalRandom、Math.random()を詳細な解説付きで紹介します。
すぐにランダムな数字が必要ですか?
コードを書かずに即座に結果を得られるオンライン乱数ジェネレーターをお試しください。
Javaコードエディター
インタラクティブなコード例でJavaでの乱数生成を学びましょう。Random.nextInt()、SecureRandom、ThreadLocalRandom、Math.random()を詳細な解説付きで紹介します。
出力
シミュレートされた出力(Javaはサーバーで実行)
「コードを実行」をクリックしてサンプル出力を確認
java.util.Randomの基本
Random.nextInt()を使用して特定の範囲のランダムな整数を生成します。Javaで最も一般的な一般的用途の乱数生成方法です。
Javaの乱数生成を理解する
Javaには複数の乱数生成方法があり、それぞれ異なるユースケースに最適化されています。java.util.Randomは線形合同生成器(LCG)アルゴリズムを使用し、SecureRandomは暗号学的に強力な乱数を提供し、ThreadLocalRandomは並行アプリケーション向けのスレッドセーフな生成を提供し、Math.random()はランダムなdoubleを生成するシンプルな方法を提供します。
java.util.Random
java.util.Randomは、シミュレーション、ゲーム、一般的なプログラミングタスクに適した高速な疑似乱数生成を提供します。基本的な使用ではスレッドセーフです。
SecureRandom
java.security.SecureRandomはプラットフォーム固有のアルゴリズム(SHA1PRNG、NativePRNG)を使用して、セキュリティアプリケーション向けの暗号学的に安全な乱数を生成します。
ThreadLocalRandom
ThreadLocalRandomは、マルチスレッドアプリケーション向けに特別に設計された効率的なスレッドセーフな乱数生成を提供し、競合と同期オーバーヘッドを回避します。
Math.random()
Math.random()は0.0から1.0の間のdouble値を返すシンプルなメソッドです。簡単な計算に便利ですが、他のオプションほど柔軟ではありません。
一般的なユースケース
ゲーム&シミュレーション
Random.nextInt()やThreadLocalRandomを使用して、ゲームループ内でランダムなサイコロ、カード抽選、敵のスポーン、ゲームイベントを生成。
セキュリティ&暗号
SecureRandomを使用して、暗号強度のランダム性を持つ安全なパスワード、APIキー、セッショントークン、暗号化ソルトを作成。
並行アプリケーション
ThreadLocalRandomを並列ストリームやマルチスレッドアプリケーションで使用して、競合を回避しパフォーマンスを向上。
ソフトウェアテスト
ランダム化されたテストデータ、ファズテスト入力、エッジケースを作成して、Javaアプリケーションの堅牢なコードカバレッジとバグ検出を確保。
Javaの乱数生成の仕組み
Javaの java.util.Random クラスは、48ビットシードを使用する線形合同生成器(LCG)アルゴリズムを使用します。疑似乱数を生成するシンプルな方法を提供し、スレッドセーフのために同期化されています。
SecureRandom クラスは、プラットフォーム固有の実装を使用して暗号学的に強力な乱数を提供します。ほとんどのシステムでは、オペレーティングシステムのエントロピーソースまたはハードウェア乱数生成器を使用します。
Java 7で導入された ThreadLocalRandom は、マルチスレッドアプリケーション向けに設計されています。現在のスレッドに分離された乱数生成器を使用し、同期オーバーヘッドと競合を回避します。
Java乱数生成のエキスパートヒント
適切なAPIを選択する
シンプルなケースにはRandom、セキュリティにはSecureRandom、並行アプリにはThreadLocalRandom、クイックプロトタイプにのみMath.random()を使用しましょう。それぞれに固有のユースケースがあります。
セキュリティには常にSecureRandomを使用
パスワード、トークン、または暗号操作にRandomやMath.random()を絶対に使用しないでください。強力なランダム性を確保し予測可能なパターンを回避するために、常にSecureRandomを使用してください。
並行アクセスの最適化
マルチスレッドアプリケーションでは、ThreadLocalRandomはRandomオブジェクトの同期化よりも大幅に高速です。並列ストリームや並行コレクションで使用してください。
技術仕様
アルゴリズム
- 線形合同生成器(Randomクラス)
- SHA1PRNGまたはNativePRNG(SecureRandom)
- ThreadLocalRandom(Java 7+、Randomベース)
- 疑似乱数double(Math.random())
パフォーマンス特性
- Math.random():シンプルなdouble向けに最速
- ThreadLocalRandom:並行アクセスに最適
- Random:一般的な用途に良好、同期オーバーヘッドあり
- SecureRandom:エントロピー収集のため低速