【问题标题】:Why ConcurrentHashMap cannot be locked for exclusive access?为什么不能锁定 ConcurrentHashMap 以进行独占访问?
【发布时间】:2013-07-27 09:51:53
【问题描述】:
来自#JCIP 的引用:
“由于 ConcurrentHashMap 不能被锁定为独占访问,我们
不能使用客户端锁定来创建新的原子操作,例如
put-if-absent,就像我们对 Vector 所做的那样
为什么我们不能仅仅获取 锁 来实现额外的原子方法并保持集合线程安全(如同步Collections.synchronizedxxx 工厂返回的集合):
【问题讨论】:
标签:
java
collections
concurrency
concurrenthashmap
【解决方案2】:
ConcurrentHashMap 的重点是读取操作永远不会阻塞,即不必检查锁。这排除了拥有这种锁的能力。
为什么我们不能只获取锁:
您可以这样做,但您必须对地图的所有访问路径始终如一地这样做,然后您就完全否定了并发数据结构的目的。它应该是无锁的。
【解决方案3】:
您编写的代码就是您的实现,如果您以这种方式使用它,那么所有其他操作都必须以这种方式工作,即所有操作都必须获取相同的锁。
但这里的重点是java并没有为此提供ConcurrentHashMap,其目的是让多个线程同时工作。
根据您的要求,请转到HashTable。