CopyOnWriteArrayList

特定のコレクションに対するaddsetremove の操作により、内部配列の新しいコピーが作成されます。これにより、ConcurrentModificationExceptionをキャッチしなくなります。

配列をコピーするときは、非スレッドセーフ要素のフィールドへのアクセスを含め、オブジェクトへの参照のみがコピーされることに注意してください。このようなコレクションは、書き込み操作の数が最小限の場合に最適です。

CopyOnWriteArrayList<E> は、スレッドセーフなArrayList の類似物で、CopyOnWrite アルゴリズムに基づいて実装されています。追加のメソッドとコンストラクターについては以下で説明します。

CopyOnWriteArrayList(E[] toCopyIn) 配列を入力として受け取るコンストラクター。
intindexOf(Ee, intindex) 指定されたインデックスから始まる、最初に見つかった要素のインデックスを返します。
int lastIndexOf(E e, int インデックス) 指定されたインデックスから開始して、逆方向検索で見つかった最初の要素のインデックスを返します。
ブール値 addIfAbsent(E e) 要素がコレクションにない場合は追加します。要素を比較するには、 equalsメソッドを使用します。
int addAllAbsent(Collection<? extends E> c) 要素がコレクションにない場合は追加します。追加された要素の数を返します。

ConcurrentMap インターフェース

マルチスレッドとスケーラビリティのサポートにより、HashMapTreeMapの実装が改善されました。

ConcurrentMap<K, V> は、追加のアトミック操作でMapを拡張するインターフェイスです。

V putIfAbsent(K キー, V 値) キーがコレクションにない場合にのみ、新しいキーと値のペアを追加します。指定されたキーの前の値を返します。
ブール値の削除(オブジェクトのキー、オブジェクトの値) 指定されたキーがマップ内の指定された値と一致する場合にのみ、キーと値のペアを削除します。要素が正常に削除された場合は true を返します。
boolean replace(K キー、V oldValue、V newValue) 古い値がマップ内の指定された値と一致する場合にのみ、キーによって古い値を新しい値に置き換えます。値が新しい値に置き換えられている場合は true を返します。
V replace(Kキー、V値) キーが何らかの値に関連付けられている場合にのみ、キーによって古い値を新しい値に置き換えます。指定されたキーの前の値を返します。

ConcurrentHashMap<K, V> - ここでは、データはキー ハッシュに分割されたセグメントの形式で表示されます。その結果、アクセスが必要な場合は、オブジェクトではなくセグメントがロックされます。イテレータはConcurrentModificationExceptionをスローせず、特定の期間のデータを表します。

ConcurrentHashMap の実装

ConcurrentHashMap<K, V> - ここでは、データがキー ハッシュごとに分類されたセグメントの形式で表示されます。その結果、データ アクセスは 1 つのオブジェクトではなくセグメントによってロックされます。さらに、イテレータは特定の時間スライスのデータを表し、 ConcurrentModificationExceptionをスローしません。

ConcurrentNavigableMap<K,V> - NavigableMapインターフェイスを拡張し、 ConcurrentNavigableMap を返します。すべてのイテレータは安全に使用でき、 ConcurrentModificationExceptionをスローしません。

ConcurrentSkipListMap<K, V> は、マルチスレッド用のTreeMap に似ています。データはキーによって並べ替えられ、containsKeygetputRemove、およびその他の同様の操作に対して平均された log(N) パフォーマンスが保証されます。

ConcurrentSkipListSet<E> は、ConcurrentSkipListMapに基づくSetインターフェイスの実装です。