CopyOnWriteArrayList

Операциите add , set , remove върху дадена колекция водят до създаване на ново копие на вътрешния масив. Това гарантира, че няма да хванем ConcurrentModificationException .

Само не забравяйте, че когато копирате масив, се копират само препратки към обекти, включително достъп до полетата на елементи, които не са безопасни за нишки. Такива колекции се използват най-добре в случаи с минимален брой операции за запис.

CopyOnWriteArrayList<E> е безопасен за нишки аналог на ArrayList , реализиран на базата на алгоритми CopyOnWrite. Допълнителни методи и конструктор са описани по-долу:

CopyOnWriteArrayList(E[] toCopyIn) Конструктор, който приема масив като вход.
int indexOf(E e, int индекс) Връща индекса на първия намерен елемент, започвайки от дадения индекс.
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, ако елементът е премахнат успешно.
булева замяна (клавиш K, V стара стойност, V нова стойност) Заменя старата стойност с новата по ключ само ако старата стойност съвпада с дадената стойност в Картата. Връща true, ако стойността е заменена с нова.
V замяна (К ключ, V стойност) Заменя стара стойност с нова по ключ само ако ключът е свързан с няHowва стойност. Връща предишната стойност за дадения ключ.

ConcurrentHashMap<K, V> - тук данните се представят под формата на сегменти, които са разделени на ключови хешове. В резултат на това, ако имате нужда от достъп, сегментът е заключен, а не обектът. Итераторите не хвърлят ConcurrentModificationException и представят данни за определен период от време.

Реализации на ConcurrentHashMap

ConcurrentHashMap<K, V> - тук данните се представят под формата на сегменти, разбити по ключови хешове. В резултат на това достъпът до данни се заключва по сегменти, а не по един обект. Освен това итераторите представят данни за определен отрязък от време и не хвърлят ConcurrentModificationException .

ConcurrentNavigableMap<K,V> - разширява интерфейса NavigableMap и връща ConcurrentNavigableMap . Всички итератори са безопасни за използване и не хвърлят ConcurrentModificationException .

ConcurrentSkipListMap<K, V> е аналог на TreeMap за многопоточност. Данните са сортирани по ключ и осреднената производителност на log(N) е гарантирана заcontainsKey,get,put,removeи други подобни операции.

ConcurrentSkipListSet<E> е реализация на интерфейса Set , базиран на ConcurrentSkipListMap .