モジュール java.base
パッケージ java.util.concurrent

クラスCopyOnWriteArraySet<E>

java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractSet<E>
java.util.concurrent.CopyOnWriteArraySet<E>
型パラメータ:
E - このセットで保持されている要素の型
すべての実装されたインタフェース:
Serializable, Iterable<E>, Collection<E>, Set<E>

public class CopyOnWriteArraySet<E> extends AbstractSet<E> implements Serializable
内部のCopyOnWriteArrayListをすべてのオペレーションで使用するSetです。 このため、同じ基本プロパティが共有されます。
  • 設定サイズが通常小さく、読取り専用操作が変更操作よりもはるかに多いアプリケーションに最適である。また、トラバーサル中にスレッド間の干渉を防ぐ必要がある。
  • スレッド・セーフである。
  • 推移的操作(addsetremoveなど)は、通常、基になる配列全体のコピーが必要になるため、負荷が大きい。
  • イテレータは、推移的removeオペレーションをサポートしていない。
  • イテレータを使用したトラバーサルは高速であり、ほかのスレッドからの干渉に遭遇することはない。 イテレータは、その構築された時点での変更されない配列スナップショットに依存する。

使用例。 次のコード例では、copy-on-writeセットを使用して、状態の更新時に特定のアクションを実行する一連のHandlerオブジェクトを管理します。

 
 class Handler { void handle() { ... } }

 class X {
   private final CopyOnWriteArraySet<Handler> handlers
     = new CopyOnWriteArraySet<>();
   public void addHandler(Handler h) { handlers.add(h); }

   private long internalState;
   private synchronized void changeState() { internalState = ...; }

   public void update() {
     changeState();
     for (Handler handler : handlers)
       handler.handle();
   }
 }

このクラスは、Java Collections Frameworkのメンバーです。

導入されたバージョン:
1.5
関連項目: