Какие знаешь потокобезопасные коллекции

«Какие знаешь потокобезопасные коллекции» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Java есть несколько потокобезопасных коллекций из пакета java.util.concurrent:

  1. CopyOnWriteArrayList - потокобезопасный аналог ArrayList. При изменении создает новую копию массива. Подходит для частого чтения и редкой записи.
List<String> list = new CopyOnWriteArrayList<>();
  1. ConcurrentHashMap - потокобезопасная версия HashMap с сегментированной блокировкой, обеспечивающей высокую производительность.
Map<String, String> map = new ConcurrentHashMap<>();
  1. ConcurrentLinkedQueue - неблокирующая потокобезопасная очередь на основе CAS-операций.

  2. BlockingQueue и ее реализации (ArrayBlockingQueue, LinkedBlockingQueue) - блокирующие очереди с поддержкой ожидания при пустой/полной очереди.

  3. ConcurrentSkipListMap/SkipListSet - аналоги TreeMap/TreeSet с поддержкой многопоточности.

Для синхронизации обычных коллекций можно использовать Collections.synchronizedList(), но это менее эффективно чем concurrent-коллекции.