为什么无法锁定ConcurrentHashMap以进行独占访问?

时间:2013-07-27 00:26:12

标签: java collections concurrency concurrenthashmap

来自#JCIP的引用:

  

“由于无法锁定ConcurrentHashMap以进行独占访问,我们   不能使用客户端锁定来创建新的原子操作,如   就像我们为Vector“

所做的那样

为什么我们不能只获取 lock 以实现其他原子方法并保持集合线程安全(如同步 Collections.synchronizedxxx 工厂返回的集合:

3 个答案:

答案 0 :(得分:3)

ConcurrentHashMap的重点是读操作永远不会阻塞,即不必检查锁。这就排除了获得这种锁定的能力。

  

为什么我们不能只获得锁定:

你可以这样做,但是你必须为地图的所有访问路径一致地执行它,然后你完全否定了并发数据结构的目的。它应该是无锁的。

答案 1 :(得分:1)

为什么呢?因为实现不支持它。 Straight from the ConcurrentHashMap JavaDocs:

  

支持以阻止所有访问的方式锁定整个表

......根据定义,“独家访问”。

答案 2 :(得分:0)

您编写的代码是您的实现,如果您以这种方式使用它,那么所有其他操作必须以这种方式工作,即所有操作必须获得相同的锁。

但这里的要点是java没有为此目的提供ConcurrentHashMap,其目的是允许多个线程同时工作。

根据您的要求,请转到HashTable