volatile修飾子
フィールド値のキャッシュを抑制する – volatile修飾子マルチスレッド環境では、性能の向上を図るために、それぞれのスレッドがフィールド値を個別にキャッシュすることがあります。スレッドが元のメモリーを読み書きする手間を省くことで、性能の向上を図っているわけです。
ただし、これはスレッドによって同じフィールドの参照値が異なる危険との背中合わせでもあります。もしも値の不整合を回避したいという場合には、volatile修飾子を付与することで、フィールド値のキャッシュを抑制できます。
public class ModVolatile { volatile int shareValue; // キャッシュの対象外 }
別解として該当するフィールドを操作している箇所を、synchronizedブロック(修飾子)で表すことも可能です。synchronizedブロック配下で扱うフィールド値は、かならず元のメモリー上から読み込まれ、書き戻されますので、キャッシュによる不整合を回避できます。
ただし、簡単な値の読み書き操作で、synchronizedブロックで括るのは冗長なので、そのような操作が頻繁に発生する場合には、volatile修飾子を利用します。
関連ページ
synchronized