CopyOnWriteArrayList

Operasi add , set , remove pada koleksi tertentu menghasilkan salinan baru dari larik internal yang sedang dibuat. Ini memastikan bahwa kami tidak menangkap ConcurrentModificationException .

Ingatlah bahwa saat menyalin array, hanya referensi ke objek yang disalin, termasuk akses ke bidang elemen yang tidak aman untuk thread. Koleksi semacam itu paling baik digunakan dalam kasus dengan jumlah operasi tulis minimum.

CopyOnWriteArrayList<E> adalah analog thread-safe dari ArrayList , yang diimplementasikan berdasarkan algoritme CopyOnWrite. Metode dan konstruktor tambahan dijelaskan di bawah ini:

CopyOnWriteArrayList(E[] keCopyIn) Konstruktor yang menggunakan array sebagai input.
int indexOf(E e, int indeks) Mengembalikan indeks dari elemen pertama yang ditemukan, mulai dari indeks yang diberikan.
int lastIndexOf(E e, indeks int) Mengembalikan indeks elemen pertama yang ditemukan dalam pencarian terbalik, dimulai dari indeks yang diberikan.
boolean addIfAbsent(E e) Tambahkan elemen jika tidak ada dalam koleksi. Metode yang sama digunakan untuk membandingkan elemen .
int addAllAbsent(Koleksi<? meluas E> c) Tambahkan elemen jika tidak ada dalam koleksi. Mengembalikan jumlah elemen yang ditambahkan.

Antarmuka ConcurrentMap

Peningkatan implementasi HashMap dan TreeMap dengan dukungan untuk multithreading dan skalabilitas.

ConcurrentMap<K, V> adalah antarmuka yang memperluas Peta dengan operasi atom tambahan.

V putIfAbsent(K kunci, nilai V) Menambahkan pasangan nilai kunci baru hanya jika kunci tidak ada dalam koleksi. Mengembalikan nilai sebelumnya untuk kunci yang diberikan.
boolean hapus (kunci objek, nilai objek) Menghapus pasangan kunci-nilai hanya jika kunci yang diberikan cocok dengan nilai yang diberikan di Peta. Mengembalikan nilai true jika elemen berhasil dihapus.
boolean ganti (kunci K, V oldValue, V newValue) Ganti nilai lama dengan yang baru dengan kunci hanya jika nilai lama cocok dengan nilai yang diberikan di Peta. Mengembalikan true jika nilainya telah diganti dengan yang baru.
V ganti (kunci K, nilai V) Mengganti nilai lama dengan yang baru dengan kunci hanya jika kunci tersebut dikaitkan dengan nilai apa pun. Mengembalikan nilai sebelumnya untuk kunci yang diberikan.

ConcurrentHashMap<K, V> - di sini data disajikan dalam bentuk segmen, yang dibagi menjadi hash kunci. Akibatnya, jika Anda memerlukan akses, maka segmennya dikunci, bukan objeknya. Iterator tidak membuang ConcurrentModificationException dan merepresentasikan data untuk jangka waktu tertentu.

Implementasi ConcurrentHashMap

ConcurrentHashMap<K, V> - di sini data disajikan dalam bentuk segmen, dipecah oleh kunci hash. Akibatnya, akses data dikunci oleh segmen, bukan oleh satu objek. Selain itu, iterator merepresentasikan data untuk waktu tertentu dan tidak membuang ConcurrentModificationException .

ConcurrentNavigableMap<K,V> - memperluas antarmuka NavigableMap dan mengembalikan ConcurrentNavigableMap . Semua iterator aman digunakan dan tidak membuang ConcurrentModificationException .

ConcurrentSkipListMap<K, V> adalah analog TreeMap untuk multithreading. Data diurutkan berdasarkan kunci dan kinerja rata-rata log(N) dijamin untukcontainsKey,get,put,remove, dan operasi serupa lainnya.

ConcurrentSkipListSet<E> adalah implementasi antarmuka Set berdasarkan ConcurrentSkipListMap .