并发hashmap是否需要同步的getter/setter?

Jas*_*son 4 java hashmap concurrenthashmap

如果我使用并发hashmap并且我有设置和获取值的方法,因为我使用并发hashmap我需要使getter和setter同步吗?这是多余的吗?一种设计更好吗?

另外,没有同步的并发hashmap比具有synchronized getter和setter的hashmap更快吗?这是一个高性能系统

谢谢

Yuv*_*mar 7

  1. java.util.concurrent.ConcurrentHashMap 是线程安全的
  2. 它比使用更快 synchronized(object)
  3. 您还需要注意不要通过这样的代码创建"逻辑"竞争条件

    if (map.get(key) != null) {
        map.put(key, new SomethingStrictlyUnique());
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 根据经验,将同步集合替换为并发集合可以提供显着的可伸缩性改进,而风险很小.

  5. 根据javadoc,ConcurrentHashMap返回的迭代器是"弱一致的"(而不是fail-fast),所以它们容忍并发修改,遍历构造迭代器时存在的元素,并且可能反映出构造后对集合的修改.迭代器.