Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 独占锁定ConcurrentHashMap_Java_Concurrency_Concurrenthashmap - Fatal编程技术网

Java 独占锁定ConcurrentHashMap

Java 独占锁定ConcurrentHashMap,java,concurrency,concurrenthashmap,Java,Concurrency,Concurrenthashmap,我知道不可能为独占访问锁定ConcurrentHashMap。 然而,我找不到原因 是因为构成CHM的“段”没有被api公开吗? 假设是这样的话,客户端代码可以执行“交接”锁定吗 干杯 我知道不可能为独占访问锁定ConcurrentHashMap。然而,我找不到原因 简单——因为这不是真的。每个线程一个实例怎么样?同步方法或同步块如何?信号量访问逻辑如何 在JAVA中使用Synchronizationblock中的synchronizer可以获得concurrenthashMap的独占锁,锁定A

我知道不可能为独占访问锁定ConcurrentHashMap。 然而,我找不到原因

是因为构成CHM的“段”没有被api公开吗? 假设是这样的话,客户端代码可以执行“交接”锁定吗

干杯

我知道不可能为独占访问锁定ConcurrentHashMap。然而,我找不到原因


简单——因为这不是真的。每个线程一个实例怎么样?同步方法或同步块如何?信号量访问逻辑如何

在JAVA中使用Synchronizationblock中的synchronizer可以获得concurrenthashMap的独占锁,锁定API

,因为他们竭尽全力使其并发?如果必须的话,您可以随时同步它。@Jeffrey-如何在原子上添加n个元素,其中n>1个元素?@Jeffrey我假设putAll(在我之前没有源代码)迭代映射并为每个元素调用putIfAbsent?如果是这样的话,只有单个的put是原子的,而不是所有的put都是原子的。@Hastings船长啊,你是。同意你的说法。我们可以从独占访问中锁定并发映射,但这不是必需的。改用并发版本的API,如putIfAbsent()等……但您将使用同步方法和块在哪个对象上获取锁?来自JCIP—“同步映射实现提供的一个功能,而ConcurrentHashMap没有提供,就是能够锁定映射以进行独占访问。使用Hashtable和synchronizedMap,获取映射锁会阻止任何其他线程访问它。”在Map对象上,是否有任何其他共享锁对象?如果我们谈论的是“能力”,而不是实现和隐藏的东西-例如,同步映射具有同步访问方法,因此它们会在开箱即用的情况下锁定自己,那么您不必自己隐式定义同步方法或块。我不知道在任何地图对象上获得锁有任何缺点。至于这一点,我很好奇,我现在正在挖掘关于这个主题的一些信息。我是对的,你可以像在其他对象上一样锁定CHM。看看这个。只是,这没有任何意义,因为CHM应该是并发访问的。尽管如此,您仍然可以进行同步—但您将失去CHM的所有好处—您也可以用HashMap代替它。