繁体   English   中英

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

[英]Why ConcurrentHashMap cannot be locked for exclusive access?

来自#JCIP的引用:

“由于ConcurrentHashMap无法被锁定以进行独占访问,因此我们无法使用客户端锁定来创建新的原子操作,例如put-if-absent,就像我们为Vector所做的那样”

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

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

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

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

为什么? 因为实现不支持它。 直接来自ConcurrentHashMap JavaDocs:

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

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

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

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

根据您的要求,选择HashTable

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM