现有如下代码,为什么getStatsMap1这个不能锁住,而getStatsMap2是可以的,这2者有什么区别,高手帮解释下,谢谢。
依据我的理解,对一个static 变量加锁和对方法加锁应该是效果一样
class TestThread {
private static Map<String, String> statsMap = null;
public Map<String, String> getStatsMap1() {
synchronized (statsMap) {
if (statsMap == null) {
statsMap = getAllTable();
}
}
return statsMap;
}
public synchronized Map<String, String> getStatsMap2() {
if (statsMap == null) {
statsMap = getAllTable();
}
return statsMap;
}
private Map<String, String> getAllTable() {
Map<String, String> map = new HashMap<String, String>();
map.put("user", "user");
return map;
}
}