.util.concurrent.ConcurrentMap代表着可以并发访问(存和取元素)的 Map .

JAVA多线程-ConcurrentMap

ConcurrentMap在继承了java.util.Map父接口的基础上额外增加了一些原子方法。

ConcurrentMap实现

既然ConcurrentMap是个接口, 如果需要用它则需要实现这个接口。java.util.concurrent包含了ConcurrentMap 的实现:

  • ConcurrentHashMap

ConcurrentHashMap

ConcurrentHashMap 和java.util.HashTable 类非常相似, 除了ConcurrentHashMap的并发性比 HashTable更好. ConcurrentHashMap取元素的时候不加锁. 另外, ConcurrentHashMap 写元素的时候不锁整个 Map . 当写入的时候Map内部只锁了一部分.

另外的不同是, ConcurrentHashMap 当在迭代时被修改不会抛出 ConcurrentModificationException. 不过,Iterator 不是为多个线程的。

有关ConcurrentMap和ConcurrentHashMap的更多详细信息,请查看官方JavaDoc。

ConcurrentMap例子

下面是如何使用 ConcurrentMap 的例子. 例子用了 ConcurrentHashMap实现:

ConcurrentMap concurrentMap = new ConcurrentHashMap(); 
concurrentMap.put("key", "value"); 
Object value = concurrentMap.get("key");

参考翻译:http://tutorials.jenkov.com/java-util-concurrent/concurrentmap.

胜象大百科