Проверяет знание способов обеспечения безопасности коллекций при параллельном доступе.
Коллекции делают потокобезопасными через синхронизированные реализации (Collections.synchronizedList, CopyOnWriteArrayList) или специализированные из java.util.concurrent (ConcurrentHashMap, ConcurrentLinkedQueue). Выбор зависит от характера операций: часто чтение — CopyOnWrite, много записей — ConcurrentHashMap.
Обёртки синхронизации:
List<E> syncList = Collections.synchronizedList(new ArrayList<>());
Блокирует всю коллекцию на каждую операцию.
Копирование при записи:
CopyOnWriteArrayList: при модификации создаёт новый массив, чтение не блокируется.
Подходит, когда операций чтения намного больше, чем записи.
Конкуррентные структуры:
ConcurrentHashMap — сегментированное хеш-дерево, высокая производительность.
ConcurrentLinkedQueue, ConcurrentSkipListMap — неблокирующие очереди и карты.
Ручная синхронизация:
Использовать synchronized блоки вокруг итераций и модификаций сложных комбинаций.
Выбор подхода:
Много читателей, мало писателей → CopyOnWriteArrayList.
Сбалансированная нагрузка → ConcurrentHashMap или другие из java.util.concurrent.
Простой случай → Collections.synchronizedX().