当使用并发哈希映射时,我是否需要在同步块周围包装放置,是否有竞争条件的机会:
synchronized(lock) {
if(this.map.get(id) != null) {
throw new Exception();
}
this.map.put(id, number);
return true;
}
当使用ConcurrentHashMap时,您不应该像在上面的示例中那样进行同步。
通过在map上同步,您将失去使用ConcurrentHashMap的好处,因为它不会在每次访问时锁定整个表。
在这种情况下,您应该使用原子操作putIfAbsent。
在多线程方式下使用时,您获得的是map的吞吐量。