1. 程式人生 > >Core.Java.Volume.I.Fundamentals.10th.Edition 14.5.8 Volatile域 中文版 章節勘誤

Core.Java.Volume.I.Fundamentals.10th.Edition 14.5.8 Volatile域 中文版 章節勘誤

ola 分享圖片 ppr app inf 原版 bubuko tile 為什麽

今天重掃了corejava 14 並發的一章,在談到volatile域代替synchronized 應用於並發更新時,看到如下內容,並發更新可用內部鎖的方式但會帶來阻塞問題,可用volatile域替代。個人發覺好像有哪裏欠了點邏輯,似乎volatile域為什麽能替代內部鎖並沒有講明原因。秉承著疑惑對了一下原版。

技術分享圖片

果然在原版中多了這麽一句解釋:

The compiler will insert the appropriate code to ensure that a change to the done
variable in one thread is visible from any other thread that reads the variable.

編譯器會插入相應的代碼以保證一個線程的值完成的改變情況對其它線程是可見的。

技術分享圖片

這對應著上文的一下兩點的問題的解決(如下圖):

一、計算機多線程高速緩存同步的問題

二、java編譯器指令重排問題

技術分享圖片

技術分享圖片

二者都會導致在多線程環境下變量值不同步。

在使用volatile後,可使變量變化後的狀態即時可見,可代替原子操作的鎖

Core.Java.Volume.I.Fundamentals.10th.Edition 14.5.8 Volatile域 中文版 章節勘誤