CopyOnWriteArrayList
特定のコレクションに対するadd、set、remove の操作により、内部配列の新しいコピーが作成されます。これにより、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 インターフェース
マルチスレッドとスケーラビリティのサポートにより、HashMapとTreeMapの実装が改善されました。
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 に似ています。データはキーによって並べ替えられ、containsKey、get、put、Remove、およびその他の同様の操作に対して平均された log(N) パフォーマンスが保証されます。
ConcurrentSkipListSet<E> は、ConcurrentSkipListMapに基づくSetインターフェイスの実装です。
GO TO FULL VERSION