让我们比较关于接口ConcurrentMap
和类ConcurrentHashMap
ConcurrentMap
默认实现等同于执行以下操作 这个{@code map}的步骤,然后返回当前值或 {@code null}如果缺席:
...
多个时,默认实现可能会重试这些步骤 线程尝试更新,包括可能调用重映射 功能多次。
ConcurrenthashMap:
尝试计算指定键及其当前的映射 映射值(如果没有当前映射,则为{@code null})。该 整个方法调用以原子方式执行。一些尝试 由其他线程更新此地图上的操作可能会被阻止 计算正在进行中,因此计算应该很短 简单,不得尝试更新此Map的任何其他映射。
我知道当前版本的Jdk ConcurrentHashMap
会阻止整个段,并且来自同一段的键的2个计算操作不能并行执行但我不确定我是否可以在我的代码中使用这些知识。在未来,oracle开发人员可以更改ConcurrentHashMap实现(使用CAS而不是阻塞)。
请分享你的想法。