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

来自#JCIP的引用:

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

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

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

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

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

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

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

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

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

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

根据您的要求,选择HashTable