目次:
定義-揮発性とはどういう意味ですか?
Volatileは、Javaプログラミング言語内のキーワードであり、クラスに関連付けられたメンバー変数を複数のスレッドによって非同期に変更できることを指定します。 コード内のvolatileキーワードは、メンバーが宣言されたときに修飾子として機能します。 キーワードは、基本的にコンパイラのコンテキストで明確な意味を持つ予約語です。
volatileキーワードは、変数が、単純なカウンターやクロックなど、環境またはシステムに依存するある種の変数を示す場合に使用されます。
Techopediaは揮発性を説明します
volatileキーワードは、メンバー変数への各読み取りアクセスがその最新の値を返すことを保証します。 最近の変更が別のスレッドを使用して行われた場合、これは効果的ではありません。 メンバー変数がvolatileとして宣言されていない場合、スレッドは別のスレッドを使用して行われた変更を認識できません。
ダブルまたはロングメンバーの場合、volatileキーワードは、仮想マシンが2つの連続した32ビット書き込みを生成せず、代わりに64ビット書き込みを1つだけ作成することも保証します。 これが実行可能でない場合、JVM実装はこの関数のアトミック性を保証し続け、古い下半分が揮発性のdoubleまたはlongの新しい上半分で読み取られないようにします。
揮発性の書き込みと読み取りは、発生前の関係を設定します。 揮発性オブジェクトにアクセスする前に、メインブロックとキャッシュされた変数との間で同期が発生します。これは、同期されたブロックに入る前または出た後に発生するのと同じです。 これは、揮発性オブジェクトを同期せずに安全に公開できることを意味します。 つまり、スレッドが揮発性オブジェクトにアクセスすると、そのオブジェクトのメンバーも更新されます。
変数がvolatileとして記述されている場合、JVMおよびJavaコンパイラは次の2つのことを実行します。
- コンパイラは、その変数に関連するステートメントと式を最大化できません。
- JVMは変数を同期します。
volatileの利点は次のとおりです。
- 軽量です
- 読み取りと書き込みのオーバーヘッドは非常に小さくなりますが、ロックよりも高速です。
- 揮発性はデッドロックに耐性があります。
