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 .
GO TO FULL VERSION