文章詳情頁
java - getValue 和 increment 方法是互斥的?
瀏覽:121日期: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++; }}
假如一個線程在寫,另一個線程在讀,不會出現(xiàn)讀線程讀到的值是寫線程還沒更新之前的值嘛?也就是讀寫線程不同步的情況
問題解答
回答1:volatile關(guān)鍵字就是用來保證內(nèi)存可見性的。
回答2:volatile 修飾的 value 使用 getValue() 讀取的時候,會一直獲取到最新值,滿足可見性volatile 能保證一次讀寫可見性,復(fù)合操作 (比如 value++) 不能保證,需要進(jìn)行加鎖或其他同步措施
標(biāo)簽:
java
相關(guān)文章:
1. docker綁定了nginx端口 外部訪問不到2. mysql update 如何回滾?3. index.php錯誤,求指點(diǎn)4. 跟同事理論:這個mysql 字段用什么好?5. 在應(yīng)用配置文件 app.php 中找不到’route_check_cache’配置項(xiàng)6. mysql - 把一個表中的數(shù)據(jù)count更新到另一個表里?7. mysql - select如何跨數(shù)據(jù)庫查詢數(shù)據(jù)8. mysql - 怎么生成這個sql表?9. 跟著課件一模一樣的操作使用tp6,出現(xiàn)了錯誤10. PHP類封裝的插入數(shù)據(jù),總是插入不成功,返回false;
排行榜

熱門標(biāo)簽