Java 8には、ストリームで使用すると思われるSplittableRandom
という乱数生成器が追加されました。しかし、それがどのようにしてThreadLocalRandom
より優れているか、より有用であるかは不明です。ドキュメントを読むことから、より良い統計的性質を持つようにアルゴリズムが変更されたようです。それは、なぜそれをBetterThreadLocalRandom
と呼び、スプリットメソッドをドロップしないのですか?誰も今までにsplit()
と電話をかけますか?SplittableRandomのポイントは何ですか?
答えて
SplittableRandom
の有用性は、決定論的な乱数生成器から来ています。ストリームの場合、異なるスレッドが異なるThreadLocalRandom
の値を使用する可能性があり、毎回異なる計算が行われます。 Doug Lea渡しでこれを言及クラスを導入しながら:
「ThreadLocalRandomオプションは、多くの目的のために素晴らしいですが、あなたは、たとえば、中、高品質なモンテカルロ・シミュレーションを、それを使用したいとは思わないでしょう。」
シミュレーションに興味深い結果があり、特定の乱数シーケンスに依存している場合は、さらに分析するために繰り返してみましょう。
異なる状況で使用される2つの異なるものを比較しています。 1つは、ある程度まで他の役割を果たすことができます。
ThreadLocalRandom
は、再帰的に分割して新たなSplittableRandom
を提供することができるのでSplittableRandom
は、発電機および発電機の発電もあり、ローカルスレッドごとに異なる乱数生成器のちょうど例です。
しかし、SplittableRandom
は、機能環境のストリームと連携できるものを提供するためのものなので、スレッドとは関係ありません。
ランダムなデータを提供することは、スレッドに依存しないでください。parallel()
をストリームで使用しても、スレッドには依存しません。私はストリームを処理しているラムダの中で自分自身がThreadLocalRandom.current()
をやっているのを見たくないでしょうか?
さらに、パラレルストリームを処理するためにスリープ/スリープ解除スレッドの固定サイズのプールを使用する実装では、複数のエントリに対して同じThreadLocalRandomが使用されます。SplittableRandom
が可能な並列パスにバインドされている特定のスレッドではなく、処理の対象となります。
はい私はストリームでThreadLocalRandomを使用しますが、なぜそうではありませんか?もちろん、インスタンスそのものを渡すことはありませんが、その呼び出しを行う際に何か問題がありますか? –
@CarlMastrangelo:特定のエントリのストリームで使用されているラムダを実行しているスレッドが分からないため、スレッドが1つしかない場合はどうなりますか?一定量のスレッドをお持ちの場合はどうなりますか? 'SplittableRandom'は、無限のランダム産卵機構を提供します。これは、私が機能環境で期待しているものです。 – Jack
スレッドの数は何故問題になるのですか?スレッドが1つしかない場合、TLR.current()。next()への各呼び出しは、予測不可能な数値を返します。 SplittableRandomは何を提供できますか?私は、TLRを使用するコードが間違っていることを期待していました。 –
- 1. Pythonで@staticmethodのポイントは何ですか?
- 2. このコードのポイントは何ですか?
- 3. iOSのナビゲーションツールバーのポイントは何ですか?
- 4. Rubyの@@ double_at_variableのポイントは何ですか?
- 5. OpenCLカーネルの__のポイントは何ですか?
- 6. D3D12のSetGraphicsRootSignatureのポイントは何ですか?
- 7. バザールのタグのポイントは何ですか?
- 8. EC2のインスタンスストレージのポイントは何ですか?
- 9. Luaのネストブラケットのポイントは何ですか?
- 10. SDLのwindow_magicのポイントは何ですか?
- 11. Zend_Exceptionのポイントは何ですか?
- 12. browserstack.com APIのポイントは何ですか?
- 13. Guzzle async promiseのポイントは何ですか?
- 14. パディングのポイントは何ですか?
- 15. DICOM:SOPInstanceUIDタグのポイントは何ですか?
- 16. Quineプログラムのポイントは何ですか?
- 17. 大入力のポイントは何ですか?
- 18. _MERGE_PROXYSTUBのポイントは何ですか?
- 19. Vaadin:H2データベースのポイントは何ですか?
- 20. uWSGIのポイントは何ですか?
- 21. ORゲートのポイントは何ですか?
- 22. Javascript:RegExp.compile()のポイントは何ですか?
- 23. ストアドプロシージャのポイントは何ですか?
- 24. os.errorのポイントは何ですか?
- 25. MethodImplOptions.InternalCallのポイントは何ですか?
- 26. document.defaultViewのポイントは何ですか?
- 27. ビルダーパターン:ディレクターのポイントは何ですか?
- 28. Python eggファイルのポイントは何ですか?
- 29. ASP.NET AJAXのポイントは何ですか?
- 30. インターフェイスのポイントは何ですか?
'BetterThreadLocalRandom' lol –
' ThreadLocalRandom'の置き換えではないことを考慮すると、 'BetterThreadLocalRandom'のようなものを呼び出すと誤解を招きます。それはスレッドローカルでさえありません。 – user2357112
私はさらに良いクラスを持っていて、私はそれを 'TheBestEverThreadLocalRandom'と呼んでいます –