我有一个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