Volatile修飾的成員變量在每次被線程訪問時,都強迫從共享內(nèi)存中重讀該成員變量的值。而且,當(dāng)成員變量發(fā)生變化時,強迫線程將變化值回寫到共享內(nèi)存。這樣在任何時刻,在并發(fā)中可保證內(nèi)存一致性
volatile聲明的變量只在主存中存儲
讀取的時候,會有讀取臟數(shù)據(jù)的情況發(fā)生
但是寫數(shù)據(jù)的時候,是能保證數(shù)據(jù)能正確寫入
volatile只保證每次都從主存拿數(shù)據(jù),其他保證不了什么吧?
告訴編譯器不要使用緩存
非long、double變量不能保證原子性,非volatile變量不能保證內(nèi)存可見性。
volatile 還能防止reorder...
就是內(nèi)存屏蔽,防止指令重拍
其實目的就是保證可見性
可以操作volatile...變量 但是不代表你的操作指令是原子的