下面这段代码存在并发陷阱??? 财富值42

2016-10-16 12:10发布

曾宪杰的《大型网站系统与Java中间件实践》第一章第1.2.2.3小节给出以下代码示例:

使用HashMap数据被进行统计;

public class TestClass {     private HashMap<String, Integer> map = new HashMap<>();          public synchronized void add(String key)     {         Integer value = map.get(key);         if(value == null)         {             map.put(key, 1);         }         else         {             map.put(key, value + 1);         }     }  }

使用ConcurrentHashMap保存数据并进行统计;

public class TestClass {     private ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();          public void add(String key)     {         Integer value = map.get(key);         if(value == null)         {             map.put(key, 1);         }         else         {             map.put(key, value + 1);         }     }  }

使用HashMap时,对add方法加锁,此时该方法是线程安全的,为何换为ConcurrentHashMap之后,原书中说存在并发陷阱???

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。