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 подскажет развёрнутый ответ в реальном времени.