ThreadLocal 変数は概念的に Java の volatile 変数の「反対」であると言っても過言ではありませんか? 前者では、すべてのスレッドが変数のローカル コピーのみを読み取り/更新するためです。しかし後者では、すべてのスレッドが常にメイン メモリにある変数の最新の値を参照します。古い値を参照する機会はありません。
質問する
493 次
1 に答える
0
その通りですが、少しひねりを加えて、
- ThreadLocal 変数は、スレッドごとに異なる変数です
- 他の変数は、揮発性であるかどうかにかかわらず、同じオブジェクトを使用する各スレッドに共通であるため、一度しか存在しません。
ただし、揮発性はある種のスレッドの読み取り/書き込み境界を指定するため、他のスレッドによって書き込まれた最新の値で同期する必要があります。ただし、volatile を使用しても、スレッドの安全性は保証されません。
たとえば、volatile int をインクリメントするインクリメント メソッドは、依然として重複を生成する可能性があります。スレッド セーフで動作することを確認するには、volatile 属性を更新するメソッドを同期する必要があります。
詳細については、こちらを確認してください: https://www.cs.umd.edu/users/pugh/java/memoryModel/jsr-133-faq.html
于 2013-08-30T15:06:01.610 に答える