Java 7 の新機能を調べていたところ、この新しいクラスが追加されていることがわかりました。
同時アクセスの場合、Math.random() の代わりに ThreadLocalRandom を使用すると、競合が少なくなり、最終的にパフォーマンスが向上します。
これがどのように実装され、競合が少なくなり、パフォーマンスが向上するかを調査していました。
Java 7 の新機能を調べていたところ、この新しいクラスが追加されていることがわかりました。
同時アクセスの場合、Math.random() の代わりに ThreadLocalRandom を使用すると、競合が少なくなり、最終的にパフォーマンスが向上します。
これがどのように実装され、競合が少なくなり、パフォーマンスが向上するかを調査していました。
事実上、この 2 つの違いは同期です。Math#random()
複数のスレッドによって同時に呼び出される可能性があるため、同期する必要がありますThreadLocalRandom
が、非同期バージョンRandom
はスレッドにバインドされているため、各スレッドが独自の (より高速な) 割り当てを取得します。
実装を詳しく見てみると、 がMath#random()
の単一インスタンスを使用してjava.util.Random
乱数を生成し、ThreadLocalRandom
スレッドごとにインスタンスを割り当てて、その意味での競合を排除していることがわかります。
ThreadLocalRandom
同期を実現する同時実行性Math#random()
を実現します。