文章詳情頁
java - getValue 和 increment 方法是互斥的?
瀏覽:125日期:2024-01-21 08:49:07
問題描述
public class CheesyCounter { // Employs the cheap read-write lock trick // All mutative operations MUST be done with the ’this’ lock held @GuardedBy('this') private volatile int value; public int getValue() { return value; } public synchronized int increment() {return value++; }}
假如一個線程在寫,另一個線程在讀,不會出現讀線程讀到的值是寫線程還沒更新之前的值嘛?也就是讀寫線程不同步的情況
問題解答
回答1:volatile關鍵字就是用來保證內存可見性的。
回答2:volatile 修飾的 value 使用 getValue() 讀取的時候,會一直獲取到最新值,滿足可見性volatile 能保證一次讀寫可見性,復合操作 (比如 value++) 不能保證,需要進行加鎖或其他同步措施
標簽:
java
相關文章:
1. 如何解決Centos下Docker服務啟動無響應,且輸入docker命令無響應?2. 我在centos容器里安裝docker,也就是在容器里安裝容器,報錯了?3. vue ajax請求回來的數據沒有渲染到頁面4. mysql新建字段時 timestamp NOT NULL DEFAULT ’0000-00-00 00:00:00’ 報錯5. docker 17.03 怎么配置 registry mirror ?6. javascript - js 關于時間的轉換以及時間的加減。7. objective-c - IOS 分享到微信 提示 應用消息數據錯誤8. javascript - 音樂播放器-圖片旋轉9. angular.js - 用angularjs的service封裝百度地圖api出錯,請問原因?10. MySQL timestamp的默認值怎么設置?
排行榜
