Mediumsynchronized-collections

Что такое Collections.synchronizedX?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Collections.synchronizedList/Set/Map — обёртки над обычными коллекциями, все методы synchronized. Coarse-grained lock (один на всю коллекцию).

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

// Compound operations — НУЖНА external synchronization
synchronized (list) {
    if (!list.isEmpty()) list.remove(0);
}

// Итерация — обязательно в synchronized блоке
synchronized (list) {
    for (String s : list) { /* ... */ }
}
  • Каждый метод берёт lock на wrapper; потокобезопасно индивидуально, но compound ops — гонка;
  • Для нового кода лучше java.util.concurrent: ConcurrentHashMap, CopyOnWriteArrayList, ConcurrentLinkedQueue;
  • unmodifiableX — read-only wrapper (UnsupportedOperationException);
  • checkedX — runtime type safety (heap pollution);
  • singletonList(x) — immutable list с одним элементом.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.