Какие знаешь многопоточные коллекции

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

Ответ

В Android/Java есть несколько потокобезопасных коллекций:

  1. ConcurrentHashMap - потокобезопасная версия HashMap. Позволяет параллельные операции чтения и ограниченное количество параллельных записей.
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("key", 1);
  1. CopyOnWriteArrayList - потокобезопасный вариант ArrayList. При изменении создает новую копию массива. Эффективен для частого чтения и редкой записи.
CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>();
list.add("item");
  1. BlockingQueue интерфейс и его реализации (ArrayBlockingQueue, LinkedBlockingQueue) - блокирующие очереди, полезные для producer-consumer сценариев.

  2. ConcurrentLinkedQueue - неблокирующая потокобезопасная очередь на основе CAS-операций.

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

Важно выбирать коллекцию в зависимости от сценария использования, так как у каждой разная производительность при разных операциях.