1

Java 7 の新機能を調べていたところ、この新しいクラスが追加されていることがわかりました。

同時アクセスの場合、Math.random() の代わりに ThreadLocalRandom を使用すると、競合が少なくなり、最終的にパフォーマンスが向上します。

これがどのように実装され、競合が少なくなり、パフォーマンスが向上するかを調査していました。

4

2 に答える 2

3

事実上、この 2 つの違いは同期です。Math#random()複数のスレッドによって同時に呼び出される可能性があるため、同期する必要がありますThreadLocalRandomが、非同期バージョンRandomはスレッドにバインドされているため、各スレッドが独自の (より高速な) 割り当てを取得します。

実装を詳しく見てみると、 がMath#random()の単一インスタンスを使用してjava.util.Random乱数を生成し、ThreadLocalRandomスレッドごとにインスタンスを割り当てて、その意味での競合を排除していることがわかります。

ThreadLocalRandom同期を実現する同時実行性Math#random()を実現します。

于 2013-10-21T18:15:01.900 に答える