并发访问对HashSet的影响

时间:2013-02-04 11:04:19

标签: java collections synchronization hashset

我遇到了一些阴暗的代码,其中HashSet同时被多个线程访问和修改,我想知道它可能产生的影响,考虑到Javadoc只解释了行为在并发,非同步访问下是“非确定性的”。

具体来说,对remove(element)的调用是否可能返回true,但其他线程永远不会看到调用的影响(即。contains(element)将始终返回{ {1}}在其他线程中)?

PS:只是为了让你放心,我知道这段代码很糟糕,我会用等效的同步集合替换true

1 个答案:

答案 0 :(得分:2)

在多个线程中访问HashSet可以。

  • 导致您不会被其他线程看到的更改。
  • 使用ConcurrentModifcationException失败的迭代器。
  • 一个线程进入HashSet代码中的无限循环(很少见但很糟糕)

注意:使用

进行简单的替换
Set<Type> set = Collections.newSetFromMap(new ConcurrentHashMap<Type, Boolean>());