[JAVA学習ノート-76]volatileの原子性と可視性
, 。
, , 。
, 。 。
volatile , volatile , ,
アクセススレッドのレジスタでは、言い換えればvolatile変数の値は、マシン命令によってすべてのスレッドがアクセスすることが一致することを保証する.非volatile変数の値は、スレッドのローカルレジスタに保存され、別のスレッドが変数にアクセスすると、強制同期がないため、ローカルレジスタの古い値が得られる可能性があります.
:
1、volatile , get/set 。
2、 volatile , ++cnt,cnt++ , , 。
例:1、i++は3つのステップに分かれています:1、volatile変数をローカルレジスタ2に読み出し、変数の値を増やす3、ローカルレジスタの値をメモリに戻し、マシンコマンドタグを介して、他のスレッドにこの値を読み込んだときにメモリで更新された値と同期するように強制します.