官术网_书友最值得收藏!

3.3 volatile如何解決可見性問題

下面我們來看一下volatile是如何解決可見性問題的呢?如果我們針對stop字段增加volatile關鍵字:

然后,使用hsdis工具獲取JIT編譯器生成的匯編指令來查看volatile寫操作帶來的影響和變化。

接著,設置JVM運行時參數:

得到的結果如下:

從上述結果中我們發現,在main線程中修改stop變量的值時,在修改命令前面會增加一個Lock#信號,這使得基于緩存鎖/總線鎖的方式達到一致性,從而保證結果的可見。

關于hsdis工具的使用方法,筆者上傳到本書配套的代碼concurrent-chapter-3模塊下的resouce目錄中,感興趣的讀者可以自己學習。

導致可見性問題的根本原因的分析到這里并沒有結束,因為除高速緩存帶來的可見性問題外,指令重排序也會導致可見性問題。

主站蜘蛛池模板: 阿坝县| 马边| 荥经县| 鸡泽县| 深州市| 白朗县| 光山县| 安远县| 昌图县| 竹北市| 乌恰县| 石屏县| 琼海市| 新建县| 叶城县| 莱西市| 都兰县| 札达县| 牙克石市| 波密县| 岳普湖县| 高雄县| 湖州市| 玉溪市| 乌海市| 洮南市| 建德市| 濮阳县| 会理县| 渭源县| 沙坪坝区| 平安县| 凤山市| 绥德县| 连南| 尚义县| 大同市| 积石山| 社会| 视频| 定日县|