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方法吗?来个好人帮帮我吧!头都大了

解决方案 »

  1.   

    不会。
    synchronized 方法是对同一个对象的同步,等效于 synchronized (this)
    要想A、B两个对象同步,要么你就用一个显式的对象作为同步锁,要么就用类同步
      

  2.   

    你这里的synchronized只对remove方法同步,意思是同时只能有一个线程访问remove方法,对get方法完全没影响!
      

  3.   

    如果把remove方法改成如下:  public void remove(String key){
    synchronized(map){            
    map.remove(key);
    }
        }
      

  4.   

    修改后,线程A调用remove时,同时线程B条用get会不会等待啊?