注目記事

【Javaコード入門】修飾子_⑧volatile修飾子

フィールド値のキャッシュを抑制する – volatile修飾子

マルチスレッド環境では、性能の向上を図るために、それぞれのスレッドがフィールド値を個別にキャッシュすることがあります。スレッドが元のメモリーを読み書きする手間を省くことで、性能の向上を図っているわけです。
ただし、これはスレッドによって同じフィールドの参照値が異なる危険との背中合わせでもあります。もしも値の不整合を回避したいという場合には、volatile修飾子を付与することで、フィールド値のキャッシュを抑制できます。

  1. public class ModVolatile {
  2.   volatile int shareValue;  // キャッシュの対象外
  3. }

別解として該当するフィールドを操作している箇所を、synchronizedブロック(修飾子)で表すことも可能です。synchronizedブロック配下で扱うフィールド値は、かならず元のメモリー上から読み込まれ、書き戻されますので、キャッシュによる不整合を回避できます。
ただし、簡単な値の読み書き操作で、synchronizedブロックで括るのは冗長なので、そのような操作が頻繁に発生する場合には、volatile修飾子を利用します。

関連ページ

修飾子_目次
修飾子
アクセス修飾子
abstract修飾子
static修飾子
final修飾子
sealed/non-sealed修飾子
transient修飾子
volatile修飾子
synchronized修飾子
native修飾子
strictfp修飾子

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。