Mediumthreadlocal
Что такое ThreadLocal?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
ThreadLocal<T> — переменная, у каждого потока своё значение. Нет необходимости в synchronization (каждый поток своё).
// SimpleDateFormat не потокобезопасен
ThreadLocal<SimpleDateFormat> fmt =
ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
String s = fmt.get().format(date);
fmt.remove(); // обязательно clean в пуле потоков!Применения: thread-confined mutable objects, connection/transaction per thread, user context per request.
- Memory leak в серверах с пулом потоков — если не
remove()после запроса, объект остаётся в ThreadLocalMap потока (критично в Tomcat/Servlet); - Не работает с async (
CompletableFutureтеряет context); InheritableThreadLocal— наследуется дочерними потоками приThread.start;- Альтернатива: Scoped Values (Java 21+, preview) — безопаснее.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.