爲什麼要畫上面的圖呢
Java中所使用的併發機制依賴於JVM的實現和CPU的指令。(是不是有點蒙,繼續往下看就會明白這句話啥意思)
1.volatile的使用
字段被聲明成 volatile。
2.volatile是如何來保證一致?(Java線程內存模型確保所有線程看到這個變量的值是一致的)
通過工具獲取JIT編譯器生成的彙編指令來查看對volatile進行寫操作時,CPU會做什麼事情,如下
重點:instanct 被volatile變量修飾後,讀寫操作的時候會多出第二行彙編代碼 ,並且加上了鎖lock。
通過查IA-32架構軟件開發者手冊可知,Lock前綴的指令在多核處理器下會引發了兩件事情
1將當前處理器緩存行的數據寫回到系統內存。
2這個寫回內存的操作會使在其他CPU裏緩存了該內存地址的數據無效
看到這是不是更懵了,那是因爲你對Java線程內存模型不理解。
不重要,只要知道上面這個過程就好了,所有等我後面具體介紹內存模型就理解了。
未完待續