0

いくつかのスレッドが同時にアクセスして変更する、怪しげなコードに遭遇しました。JavadocHashSetは、同時実行時の動作が「非決定的」であると説明しているだけなので、これがどのような影響を与える可能性があるかを知りたいと思いました。 、非同期アクセス。

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 に答える