Какие структуры данных в Java синхронизированные, а какие не синхронизированные?

В Java некоторые структуры данных являются синхронизированными (thread-safe), а некоторые — нет.

Короткий ответ

Что ответить на собеседовании

В Java некоторые структуры данных являются синхронизированными (thread-safe), а некоторые — нет.

Подробный разбор

Ответ с пояснениями

В Java некоторые структуры данных являются синхронизированными (thread-safe), а некоторые — нет.

Синхронизированные:

  • Vector — синхронизированный аналог ArrayList.
  • Hashtable — синхронизированный аналог HashMap.
  • Stack — наследует Vector, поэтому тоже синхронизирован.
  • Коллекции, обёрнутые через Collections.synchronizedList(), synchronizedMap() и т.п.
  • Классы из пакета java.util.concurrent, например, ConcurrentHashMap, CopyOnWriteArrayList.

Несинхронизированные:

  • ArrayList
  • LinkedList
  • HashMap
  • HashSet

Если нужно использовать несинхронизированную коллекцию в многопоточном окружении, её можно обернуть в синхронизированную с помощью методов из Collections или использовать специализированные классы из java.util.concurrent.

Пример:

List<String> list = Collections.synchronizedList(new ArrayList<>());

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее