Menguasai ConcurrentMap Java: Map Thread-Safe Dijelaskan
Antarmuka ConcurrentMap Java
Pelajari bagaimana ConcurrentMap Java menyediakan operasi map yang aman untuk thread, metodenya inti, dan contoh praktis menggunakan ConcurrentHashMap.
Antarmuka ConcurrentMap memperluas java.util.Map dan menyediakan implementasi map yang sangat konkuren dan aman untuk thread. Ia menjamin bahwa banyak thread dapat melakukan operasi baca, tulis, dan pembaruan secara bersamaan tanpa merusak kondisi internal map.
Karena ConcurrentMap adalah antarmuka, Anda tidak dapat membuat instance langsung. Implementasi yang paling umum adalah java.util.concurrent.ConcurrentHashMap, yang menawarkan pembacaan bebas kunci dan penguncian halus untuk pembaruan.
Kelas yang Mengimplementasikan ConcurrentMap
Meskipun ConcurrentMap itu sendiri tidak dapat dibuat instance, Anda dapat membuat peta konkret dengan menggunakan salah satu implementasinya. Standar de facto adalah ConcurrentHashMap, tetapi alternatif seperti ConcurrentSkipListMap ada untuk kebutuhan map yang diurutkan.

Menggunakan ConcurrentMap
Pertama, impor antarmuka:
import java.util.concurrent.ConcurrentMap;
Kemudian buat instance ConcurrentHashMap:
ConcurrentMap<String, Integer> numbers = new ConcurrentHashMap<>();
Dalam contoh ini, numbers adalah map yang aman untuk thread di mana setiap kunci String dipasangkan dengan nilai Integer.
Konsep kunci:
- Kunci – pengidentifikasi unik yang memetakan ke nilai.
- Nilai – data yang terkait dengan kunci.
Metode Utama ConcurrentMap
Selain semua operasi Map standar, ConcurrentMap memperkenalkan beberapa metode atomik dan bebas kunci:
- putIfAbsent(K key, V value) – Menambahkan pasangan kunci/nilai hanya jika kunci belum ada.
- compute(K key, BiFunction) – Memperbarui nilai untuk kunci yang ditentukan secara atomik berdasarkan nilainya saat ini.
- computeIfAbsent(K key, Function) – Menghasilkan nilai untuk kunci yang hilang menggunakan fungsi yang disediakan.
- computeIfPresent(K key, BiFunction) – Memperbarui nilai dari kunci yang ada secara atomik.
- forEach(BiConsumer) – Melakukan tindakan yang diberikan untuk setiap entri.
- merge(K key, V value, BiFunction) – Menggabungkan nilai baru dengan nilai yang ada menggunakan fungsi yang disediakan.
Untuk referensi mendalam, lihat dokumentasi Java resmi.
Menggunakan ConcurrentHashMap dengan ConcurrentMap
import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ConcurrentHashMap; public class Main { public static void main(String[] args) { // Create a thread‑safe map ConcurrentMap<String, Integer> numbers = new ConcurrentHashMap<>(); // Insert elements numbers.put("Two", 2); numbers.put("One", 1); numbers.put("Three", 3); System.out.println("ConcurrentMap: " + numbers); // Retrieve a value int value = numbers.get("One"); System.out.println("Accessed Value: " + value); // Remove a key/value pair int removed = numbers.remove("Two"); System.out.println("Removed Value: " + removed); } }
Output
ConcurrentMap: {One=1, Two=2, Three=3} Accessed Value: 1 Removed Value: 2 Untuk penggunaan yang lebih lanjut, konsultasikan dokumentasi ConcurrentHashMap.