文章詳情頁
java - getValue 和 increment 方法是互斥的?
瀏覽:113日期: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. Docker for Mac 創建的dnsmasq容器連不上/不工作的問題2. css3 - 圖片等比例縮放3. html - css3中多列高度 統一4. javascript - 使用angular 的ui-sref 中出現了中文參數,點擊跳轉后瀏覽器的地址欄里出現轉義后的%AE....%a%45. css3 - 如何將網頁CSS背景圖高斯模糊且全屏顯示6. javascript - 一個賦值運算的問題7. css3 - animation屬性,safari瀏覽器不支持相關效果8. javascript - 求賜教:網易郵箱Web端模擬登錄看信的加密參數_ntes_nnid、_ntes_nuid9. css - jq有無現成函數改變rotateX/Y的deg10. javascript - QWebEngineView 如何爬 angular 的動態數據?
排行榜
