CopyOnWriteArrayList
add, set, remove operatsiyalari ushbu kollektsiyalarda yangi ichki massiv nusxasini yaratishga olib keladi. Bu bizga ConcurrentModificationException kelib chiqishini oldini olishni kafolatlaydi.
Faqat esdan chiqarmaslik kerakki, massiv nusxalanayotganda faqat ob'ektlar uchun havolalar nusxalanadi, shu jumladan elementlarning maydonlariga kirish thread-safe emas. Bunday kollektsiyalarni kam miqdordagi yozish operatsiyalari bo'lgan hollarda ishlatish yaxshiroq.
CopyOnWriteArrayList<E> — ArrayListning CopyOnWrite algoritmlariga asoslangan thread-safe analogi. Qo'shimcha metodlar va konstruktor quyida keltirilgan:
| CopyOnWriteArrayList(E[] toCopyIn) | Massivni qabul qiluvchi konstruktor. |
| int indexOf(E e, int index) | Berilgan indeksdan qidirishni boshlash orqali topilgan birinchi elementning indeksini qaytaradi. |
| int lastIndexOf(E e, int index) | Orqaga qarab qidirib, berilgan indeksdan topilgan birinchi elementning indeksini qaytaradi. |
| boolean addIfAbsent(E e) | Agar element kollektsiyada bo'lmasa, uni qo'shadi. Elementlarni solishtirish uchun equals metodi ishlatiladi. |
| int addAllAbsent(Collection<? extends E> c) | Agar kollektsiyada yo'q bo'lsa, elementlarni qo'shadi. Qo'shilgan elementlar sonini qaytaradi. |
ConcurrentMap interfeys
Multiple threads va scalabilityni qo'llab-quvvatlovchi takomillashtirilgan HashMap va TreeMap realizatsiyalari.
ConcurrentMap<K, V> — Mapni qo'shimcha atomar operatsiyalar bilan kengaytiradigan interfeys.
| V putIfAbsent(K key, V value) | Yangi key-value juftligini faqat kalit mavjud bo'lmasa qo'shadi. Berilgan kalit uchun oldingi qiymatni qaytaradi. |
| boolean remove(Object key, Object value) | Key-value juftligini faqat Map'dagi kalit belgilangan qiymatga mos kelsa o'chiradi. Element muvaffaqiyatli o'chirilgan bo'lsa, true qaytaradi. |
| boolean replace(K key, V oldValue, V newValue) | Eski qiymatni yangi qiymatga faqat eski qiymat Map'dagi belgilangan qiymatga mos kelsa almashtiradi. Qiymat yangi qiymatga almashtirilgan bo'lsa, true qaytaradi. |
| V replace(K key, V value) | Eski qiymatni yangi qiymatga faqat kalit istalgan qiymatga bog'langan bo'lsa almashtiradi. Berilgan kalit uchun oldingi qiymatni qaytaradi. |
ConcurrentHashMap<K, V> — bu yerda ma'lumotlar segmentlar ko'rinishida, kalitlarning hash'lariga qarab bo'lingan holda taqdim etiladi. Natijada, agar sizga kirish kerak bo'lsa, ob'ekt emas, balki segment bloklanadi. Iteratorda ConcurrentModificationException tashlanmaydi va ma'lumotlarni ma'lum vaqt oralig'ida ko'rsatadi.
ConcurrentHashMap realizatsiyalari
ConcurrentHashMap<K, V> — bu yerda ma'lumotlar kalitlarning hash'lariga ko'ra segmentlarga bo'lingan holda taqdim etiladi. Natijada, ma'lumotlarga kirish segmentlar bo'yicha emas, bir ob'ekt bo'yicha emas, balki bo'ylab amalga oshiriladi. Shuningdek, iteratorda ma'lumotlar muayyan vaqt oralig'ida taqdim etiladi va ConcurrentModificationException tashlanmaydi.
ConcurrentNavigableMap<K,V> — NavigableMap interfeysini kengaytiradi va ConcurrentNavigableMapni qaytaradi. Barcha iteratlar xavfsiz va ConcurrentModificationException tashlamaydi.
ConcurrentSkipListMap<K, V> — bu TreeMapning ko'p oqimli analogidir. Ma'lumotlar kalit bilan tartiblangan holda saqlanadi va containsKey, get, put, remove va boshqa shunga o'xshash operatsiyalar uchun o'rtacha log(N) samaradorlik kafolatlanadi.
ConcurrentSkipListSet<E> — bu Set interfeysining ConcurrentSkipListMap asosidagi realizatsiyasi.
GO TO FULL VERSION