public class MapManager {
private static Map<String,String> map = new HashMap<String,String>();
public MapManager(){
for (int i = 0; i < 100000; i++) {
map.put(""+i, i+"");
}
}
public String get(String key){
return map.get(key);
}
public synchronized void remove(String key){
map.remove(key);
}
}如果有两个MapManager的对象A和B,当A调用remove方法是会给map这个共享变量加锁吗,也就是同一时间B对象可以调用get方法吗?来个好人帮帮我吧!头都大了
private static Map<String,String> map = new HashMap<String,String>();
public MapManager(){
for (int i = 0; i < 100000; i++) {
map.put(""+i, i+"");
}
}
public String get(String key){
return map.get(key);
}
public synchronized void remove(String key){
map.remove(key);
}
}如果有两个MapManager的对象A和B,当A调用remove方法是会给map这个共享变量加锁吗,也就是同一时间B对象可以调用get方法吗?来个好人帮帮我吧!头都大了
synchronized 方法是对同一个对象的同步,等效于 synchronized (this)
要想A、B两个对象同步,要么你就用一个显式的对象作为同步锁,要么就用类同步
synchronized(map){
map.remove(key);
}
}