今日仕事中にJavaのキーワードに遭遇しましたvolatile
。あまり詳しくないのでこの説明。
その記事では問題のキーワードが詳細に説明されていますが、そのキーワードを使用したことがありますか、または正しい方法でこのキーワードを使用できるケースを見たことはありますか?
ベストアンサー1
volatile
にはメモリの可視性に関するセマンティクスがあります。基本的に、フィールドの値は、volatile
書き込み操作が完了すると、すべてのリーダー (特に他のスレッド) に対して可視になります。 がないとvolatile
、リーダーは更新されていない値を見る可能性があります。
質問にお答えします。はい、volatile
変数を使用して、一部のコードがループを続行するかどうかを制御します。ループはvolatile
値をテストし、それが である場合は続行しますtrue
。条件は、「stop」メソッドを呼び出すことによって に設定できますfalse
。ループは、false
stop メソッドが実行を完了した後、値をテストすると、それを確認して終了します。
この本は「Java の並行処理の実践私が強くお勧めする「 」は、 についてよく説明していますvolatile
。この本は、質問で参照されている IBM の記事を書いた人と同じ人が書いています (実際、その記事の最後には彼の本が引用されています)。私が を使用しているのは、volatile
彼の記事で「パターン 1 ステータス フラグ」と呼ばれているものです。
詳しく知りたい場合はvolatile
裏で動いているものについては、Javaメモリモデルそのレベルを超えたい場合は、次のような優れたコンピュータアーキテクチャの本を参照してください。ヘネシー&パターソンキャッシュの一貫性とキャッシュの整合性について読んでください。