我有一些关于
Java的问题.
>弦
我有一个班:
public class Test {
private String s;
public synchronized void setS(String str){
s = s + " - " + str;
}
public String getS(){
return s;
}
}
我在我的设置器中使用“同步”,并避免在我的getter,因为在我的应用程序,有大量的数据获取,很少的设置.必须同步设置以避免不一致.我的问题是:获取并设置变量原子?我的意思是,在多线程环境中,Thread1即将设置变量s,而Thread2即将获得“s”.有没有什么方法可以获得与旧的值或s的新值不同的东西(假设我们只有两个线程)?
在我的应用程序中,获取新值并不是问题,而不是老问题.但是我能得到别的东西吗?
> HashMap的获取和放置怎么样?
考虑到这一点
public class Test {
private Map map = Collections.synchronizedMap(new HashMap());
public synchronized void setMapElement(Integer key,String value){
map.put(key,value);
}
public String getValue(Integer key){
return map.get(key);
}
}
放置和获得原子? HashMap如何处理将元素放入其中?它是否首先删除旧的值,并把现在的一个?我能否得到旧的价值或新的价值?
提前致谢!