并发hashmap不需要同步的getter / setter吗?

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

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

谢谢

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

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

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

1)如果你只有一个操作的getter和setter方法(比如get方法只返回给定键的映射值)或任何线程安全操作,那么你不需要为这些getter显式同步块&setter。

2)是的,使用没有synchronized块的并发hashmap将大大提高性能。

注意:ConcurrentHashMap是弱一致的,在大多数情况下是可以接受的。