Сегодня разберёмся, почему
ConcurrentHashMap лучше подходит для многопоточной работы, чем HashMap, и как он работает внутри. В отличие от
HashMap, который не потокобезопасен и может приводить к бесконечным циклам при одновременной модификации, ConcurrentHashMap использует сегментированную блокировку, что позволяет работать с разными частями карты параллельно без полной блокировки всей структуры. 📌 Основные особенности:
- Делит данные на сегменты (до JDK 8 или использует
synchronized и CAS операции (начиная с JDK 8).- Чтение (
get()) не требует блокировки.- Запись (
put()) использует минимально возможные блокировки.- Нет
null ключей и значений (в отличие от HashMap).Пример использования:
import java.util.concurrent.ConcurrentHashMap;
public class Main {
public static void main(String[] args) {
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("Java", 1);
map.put("Python", 2);
map.put("C++", 3);
System.out.println(map.get("Java")); // 1
}
}
📲 Мы в MAX
👉@BookJava