マルチスレッド環境で共有変数の可視性を確保できます
次の方法で複数の命令を防止します。メモリバリアの追加 並べ替え
可視性とは、スレッドが共有変数を変更すると、他のスレッドがその変更を即座に確認できることを意味します。可視性は本質的にいくつかの側面によって引き起こされます
#CPU レベル キャッシュ。CPU の計算効率の問題を解決するために、CPU 内に 3 レベルのキャッシュが設計されています。メモリ IO 効率の問題ですが、キャッシュの一貫性の問題も発生します。マルチスレッド実行の場合、キャッシュの一貫性の問題は可視性の問題につながります。そのため、volatile 変更された共有変数を追加します。
キーワードの場合、jvm 仮想マシンは #lock アセンブリ命令を自動的に追加し、この命令はさまざまな CPU モデルに応じて バス ロック
または キャッシュを自動的に追加します。
MESI プロトコル をさらに最適化し、CPU 使用率を向上させます。彼は、
StoreBuffer というメカニズムを導入しました。この最適化メカニズムは、CPU のアウトオブオーダー実行につながります。このような問題を回避するために、CPU はメモリ バリア命令を提供します。上位層のアプリケーションは、適切な場所にメモリ バリアを挿入して、CPU 命令を回避できます。並べ替えの問題
volatile キーワードは次のようになります。
volatile キーワードに加えて、JMM は
Happens-Before モデルを使用してマルチスレッドの可視性関係を記述します。つまり、
Happens- 2 つの操作間に の関係がある場合、2 つの操作には可視性の関係があり、
volatile キーワードの追加を考慮する必要はありません。可視性を保証するには
以上がJavaでのvolatileキーワードの使用法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。