0

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

具体来说,是否有可能调用remove(element)返回true,但调用的效果永远不会被其他线程看到(即,contains(element)总是会true在其他线程中返回)?

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

4

1 回答 1

3

多线程访问HashSet即可。

  • 导致您所做的更改不会被另一个线程看到。
  • 一个迭代器因 ConcurrentModifcationException 而失败。
  • 进入 HashSet 代码中的无限循环的线程(很少见,但确实很糟糕)

注意:一个简单的替换是使用

Set<Type> set = Collections.newSetFromMap(new ConcurrentHashMap<Type, Boolean>());
于 2013-02-04T11:06:19.677 回答