天天看點

JAVA JUC 李賀飛

JAVA JUC 李賀飛

1.volatile關鍵字與記憶體可見性

JAVA JUC 李賀飛

主線程沒有更新緩存資料的時間,是以記憶體裡的改動同步不過來

一直讀的的緩存裡的資料,記憶體的資料被寫了還是讀不到

同步鎖可以解決,但是效率低

volatile:多個線程共享記憶體資料,保證記憶體中的資料是可見的。使用記憶體障礙,保證從主存拿資料

volaile修飾以後,jvm不能重排序了,相較于synchronize輕量級,但是

  • 沒有互斥性
  • 不能保證變量的原子性(不可分割)

2.原子變量與CAS算法

JAVA JUC 李賀飛

i++ 讀改寫三步,可能保證記憶體可見性,但是寫記憶體同步資料,無法互斥,會有重複操作污染資料。i++操作被分割開來,沒有原子性了

同時寫記憶體,兩條線一樣的值同時發生改變成一樣的,後寫的覆寫了先寫的