CopyOnWriteArrayList
Operațiile de adăugare , setare , eliminare pentru o anumită colecție au ca rezultat crearea unei noi copii a matricei interne. Acest lucru asigură că nu prindem ConcurrentModificationException .
Nu uitați că atunci când copiați o matrice, sunt copiate doar referințele la obiecte, inclusiv accesul la câmpurile elementelor care nu sunt sigure pentru fire. Astfel de colecții sunt cel mai bine utilizate în cazurile cu un număr minim de operații de scriere.
CopyOnWriteArrayList<E> este un analog de fire-safe al ArrayList , implementat pe baza algoritmilor CopyOnWrite. Metodele suplimentare și constructorul sunt descrise mai jos:
CopyOnWriteArrayList(E[] toCopyIn) | Un constructor care ia ca intrare o matrice. |
int indexOf(E e, int index) | Returnează indexul primului element găsit, începând cu indexul dat. |
int lastIndexOf(E e, int index) | Returnează indexul primului element găsit într-o căutare inversă, începând cu indexul dat. |
boolean addIfAbsent(E e) | Adăugați un element dacă nu se află în colecție. Metoda equals este folosită pentru a compara elemente . |
int addAllAbsent(Colecție<? extinde E> c) | Adăugați elemente dacă nu sunt în colecție. Returnează numărul de elemente adăugate. |
Interfață ConcurrentMap
Implementări îmbunătățite ale HashMap și TreeMap cu suport pentru multithreading și scalabilitate.
ConcurrentMap<K, V> este o interfață care extinde Map cu operații atomice suplimentare.
V putIfAbsent (tasta K, valoarea V) | Adaugă o nouă pereche cheie-valoare numai dacă cheia nu se află în colecție. Returnează valoarea anterioară pentru cheia dată. |
boolean remove (cheie obiect, valoare obiect) | Elimină perechea cheie-valoare numai dacă cheia dată se potrivește cu valoarea dată din Hartă. Returnează adevărat dacă elementul a fost eliminat cu succes. |
înlocuire booleană (cheia K, V vecheValoare, V nouăValoare) | Înlocuiește valoarea veche cu cea nouă prin cheie numai dacă valoarea veche se potrivește cu valoarea dată în Hartă. Returnează adevărat dacă valoarea a fost înlocuită cu una nouă. |
V înlocuiți (tasta K, valoarea V) | Înlocuiește o valoare veche cu una nouă după cheie numai dacă cheia este asociată cu orice valoare. Returnează valoarea anterioară pentru cheia dată. |
ConcurrentHashMap<K, V> - aici datele sunt prezentate sub formă de segmente, care sunt împărțite în hash-uri cheie. Ca urmare, dacă aveți nevoie de acces, atunci segmentul este blocat, nu obiectul. Iteratorii nu lansează ConcurrentModificationException și reprezintă date pentru o anumită perioadă de timp.
Implementări de ConcurrentHashMap
ConcurrentHashMap<K, V> - aici datele sunt prezentate sub formă de segmente, defalcate pe hash-uri cheie. Drept urmare, accesul la date este blocat de segmente, nu de un singur obiect. În plus, iteratoarele reprezintă date pentru o anumită porțiune de timp și nu aruncă ConcurrentModificationException .
ConcurrentNavigableMap<K,V> - extinde interfața NavigableMap și returnează un ConcurrentNavigableMap . Toți iteratoarele sunt sigure de utilizat și nu lansează ConcurrentModificationException .
ConcurrentSkipListMap<K, V> este un analog al TreeMap pentru multithreading. Datele sunt sortate după cheie și performanța medie a log(N) este garantată pentrucontainsKey,get,put,removeși alte operațiuni similare.
ConcurrentSkipListSet<E> este o implementare a interfeței Set bazată pe ConcurrentSkipListMap .
GO TO FULL VERSION