我有一個singleton類,它有一個可以被多個線程同時訪問的地圖。有人可以檢查下面的代碼,並告訴我它的線程是否安全? (注:我不打算使用的ConcurrentHashMap和printMap方法被調用只有很少。)synchronizedMap線程的這種用法是否安全?
public class MySingleton{
private Map<String,String> cache = Collections.synchronizedMap(
new LinkedHashMap<String,String>());
public String getValue(String key){
return cache.get(key)
}
public void setValue(String key, String value){
cache.put(key, value);
}
public void printMap(){
synchronized(cache){
for(Entry<String,String> entry: cache.entrySet()){
println('key: '+entry.getKey()+', value: ' + value);
}
}
}
}
我的測試工作......但我懷疑如果這個代碼是不夠好,被稱爲「線安全'。
點了,我認爲:
的readValue和putValue方法並不需要有一個「同步」塊,因爲我使用的是synchronizedMap
printMap應該有同步塊,因爲javadoc表示我們應該在每次迭代之前同步Map實例。 http://download.oracle.com/javase/1.5.0/docs/api/java/util/Collections.html#synchronizedMap%28java.util.Map%29
任何幫助表示讚賞。
在這裏是有點挑剔,但那個班真的是單身人士嗎? – DaveH 2011-04-13 12:19:10
是的,它的春天豆 – rk2010 2011-04-13 12:28:30
行 - 只是檢查... :) – DaveH 2011-04-13 12:32:52