关键是要提供
HashMap线程安全的实现。多个线程可以对其进行读写,而没有机会接收到过时或损坏的数据。
ConcurrentHashMap提供自己的同步,因此您不必显式同步对其的访问。
的另一个功能
ConcurrentHashMap是它提供了该
putIfAbsent方法,如果指定的键不存在,它将 自动
添加一个映射。考虑以下代码:
ConcurrentHashMap<String, Integer> myMap = new ConcurrentHashMap<String, Integer>();// some stuffif (!myMap.contains("key")) { myMap.put("key", 3);}此代码不是线程安全的,因为另一个线程可以
"key"在到
contains和的调用之间添加映射
put。正确的实现是:
myMap.putIfAbsent("key", 3);


