程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 多線程 java 同步 鎖-java中多線程訪問同步問題

多線程 java 同步 鎖-java中多線程訪問同步問題

編輯:編程解疑
java中多線程訪問同步問題

public class SyschronizedSample{
private int value;
public synchronized int get(){ return value;}
public synchronized void set(int value)
{
this.value=value;
}
}

以上的代碼中,要使得訪問value時具有線程安全,所以在set和get方法中都加了synchronized同步語句,如果只在set方法前加syschronized,而不在get方法前面加,能否保證線程的安全性,為什麼

最佳回答:


     通常鎖都加在寫入操作上,保證同一時刻只能有一個線程修改共享數據,而讀操作不加鎖可能數據有較弱的一致性,即我們讀到數據後可能下一時刻有線程修改了該數據,但絕對是讀的那一時刻的最新數據,這是Java內存模型能夠保證的。從提高並發吞吐量上來講,沒有必要讀操作也用互斥鎖的,這也是我們優化並發程序的一個考慮方面,就是盡可能縮小鎖鎖粒度,加鎖范圍。如果讀操作對數據一致性要求不那麼苛刻的話,犧牲讀操作,換取高發效率也是值得的,Java典型的實踐就是ConcurrentHashMap,它能提供高效的寫效率,但對一些讀操作如size()操作一致性減弱,從另一個層面上來說,高並發環境下這種讀操作也沒有多大意義的,側重功能都集中在寫上面了。
wanghailong000
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved