1. ホーム
  2. java

[解決済み] SecureRandomはスレッドセーフですか?

2022-10-18 13:09:03

質問

質問 SecureRandom はスレッドセーフですか?つまり、初期化した後、次の乱数へのアクセスはスレッドセーフであることを信頼できるでしょうか?ソースコードを調べると、そうであることがわかるようです。 このバグ レポート は、スレッドセーフであることを示す文書がないのは、javadoc の問題であることを示しているようです。どなたか、実際にスレッドセーフであることを確認された方はいらっしゃいますか?

どのように解決するのですか?

はい、そうです。それは Random を拡張し、常に 事実上 スレッドセーフな実装があり、さらに Java 7 からはスレッドセーフを明示的に保証しています。

多くのスレッドが一つの SecureRandom を使用している場合、パフォーマンスを低下させる競合が発生する可能性があります。一方、初期化された SecureRandom インスタンスの初期化には比較的時間がかかります。グローバルRNGを共有するのが最善か、それともスレッドごとに新しいものを作るのが最善かは、アプリケーションに依存します。そのため ThreadLocalRandom クラスをサポートするソリューションを提供するパターンとして使用することができます。 SecureRandom .