我有一些關於Java的assigment的問題。Java分配問題 - 這是原子嗎?
- 字符串
我有一個類:
public class Test {
private String s;
public synchronized void setS(String str){
s = s + " - " + str;
}
public String getS(){
return s;
}
}
在我的二傳手我使用「同步」,並避免它在我消氣,因爲在我的應用程序,有大量的數據獲取和很少的設置。必須同步設置以避免不一致。我的問題是:正在獲取和設置一個可變的原子?我的意思是,在多線程環境中,Thread1即將設置變量s,而Thread2即將獲取「s」。有什麼方法可以讓getter方法獲得與s的舊值或s的新值不同的東西(假設我們只有兩個線程)? 在我的應用程序中,獲取新值並不是問題,並且獲得舊值不是問題。但我能得到別的東西嗎?
- 那麼HashMap的獲取和放置呢?
考慮這個:
public class Test {
private Map<Integer, String> map = Collections.synchronizedMap(new HashMap<Integer, String>());
public synchronized void setMapElement(Integer key, String value){
map.put(key, value);
}
public String getValue(Integer key){
return map.get(key);
}
}
是理順和得到原子? HashMap如何處理一個元素?它是否首先刪除舊的價值,並把現在的價值?除了舊價值或新價值以外,我能獲得嗎?
在此先感謝!
+1用於指定讀者不需要查看絕對最新值。當然,這應該在生產代碼中記錄下來。 – 2010-03-26 18:24:32