在修改过程中是否有一种简单的方法可以锁定ConcurrentHashMap对象而不会阻塞整个地图?据我所知,这里是Java 8中的简单方法 - 方法 competitionIfPresent ,但不幸的是我在项目上有1.7个java。
private Map<Long, AtomicInteger> idForCountMap;
public void decrement(Long id) {
AtomicInteger count = idForCountMap.get(id);
if (count != null){
count.decrementAndGet();
// do some additional operations
}
}
这是一个例子。如何在不阻塞整个地图的情况下执行递减操作作为原子操作?
P.S。假设这是很常见的情况,但我找不到很好的解释答案。
答案 0 :(得分:1)
我认为如果您可以为映射值带来共享密钥,并获取完整操作的密钥锁定,它将会运行。
public void decrement(SharedKey id) {
synchronized(id){
AtomicInteger count = idForCountMap.get(id);
if (count != null){
count.decrementAndGet();
// do some additional operations
}
}
}