- Java并發編程深度解析與實戰
- 譚鋒(Mic)
- 281字
- 2022-05-10 18:39:20
3.3 volatile如何解決可見性問題
下面我們來看一下volatile是如何解決可見性問題的呢?如果我們針對stop字段增加volatile關鍵字:

然后,使用hsdis工具獲取JIT編譯器生成的匯編指令來查看volatile寫操作帶來的影響和變化。
接著,設置JVM運行時參數:

得到的結果如下:

從上述結果中我們發現,在main線程中修改stop變量的值時,在修改命令前面會增加一個Lock#信號,這使得基于緩存鎖/總線鎖的方式達到一致性,從而保證結果的可見。
關于hsdis工具的使用方法,筆者上傳到本書配套的代碼concurrent-chapter-3模塊下的resouce目錄中,感興趣的讀者可以自己學習。
導致可見性問題的根本原因的分析到這里并沒有結束,因為除高速緩存帶來的可見性問題外,指令重排序也會導致可見性問題。
推薦閱讀
- GAE編程指南
- C語言程序設計案例教程(第2版)
- JavaScript:Functional Programming for JavaScript Developers
- Mastering Objectoriented Python
- Maven Build Customization
- Mastering Ember.js
- 我的第一本算法書
- Oracle數據庫從入門到運維實戰
- 精通Scrapy網絡爬蟲
- Blender 3D Incredible Machines
- Microsoft System Center Orchestrator 2012 R2 Essentials
- SQL Server數據庫管理與開發兵書
- Scala for Machine Learning(Second Edition)
- Kotlin極簡教程
- SQL Server 2008中文版項目教程(第3版)