来自#JCIP的引用:
“由于无法锁定ConcurrentHashMap以进行独占访问,我们 不能使用客户端锁定来创建新的原子操作,如 就像我们为Vector“
所做的那样
为什么我们不能只获取 lock 以实现其他原子方法并保持集合线程安全(如同步 Collections.synchronizedxxx 工厂返回的集合:
答案 0 :(得分:3)
ConcurrentHashMap的重点是读操作永远不会阻塞,即不必检查锁。这就排除了获得这种锁定的能力。
为什么我们不能只获得锁定:
你可以这样做,但是你必须为地图的所有访问路径一致地执行它,然后你完全否定了并发数据结构的目的。它应该是无锁的。
答案 1 :(得分:1)
答案 2 :(得分:0)
您编写的代码是您的实现,如果您以这种方式使用它,那么所有其他操作必须以这种方式工作,即所有操作必须获得相同的锁。
但这里的要点是java没有为此目的提供ConcurrentHashMap
,其目的是允许多个线程同时工作。
根据您的要求,请转到HashTable
。