Вопрос проверяет понимание локального состояния потоков и изоляции данных в многопоточной среде.
ThreadLocal позволяет хранить данные, привязанные к конкретному потоку.
Каждый поток видит своё собственное значение.
Значения не разделяются между потоками.
Это достигается через внутреннюю структуру данных внутри Thread.
Часто используется для контекста выполнения.
ThreadLocal решает проблему передачи состояния без синхронизации.
ThreadLocal — это механизм хранения данных, уникальных для каждого потока исполнения.
У каждого Thread есть ThreadLocalMap
ThreadLocal используется как ключ
Значение хранится внутри потока, а не в самом ThreadLocal
Схематично:
Thread → ThreadLocalMap → (ThreadLocal → value)
ThreadLocal<String> userContext = new ThreadLocal<>();
userContext.set("user-123");
String value = userContext.get();
В другом потоке:
userContext.get(); // null
хранение SecurityContext
трассировка запросов
локали и временные зоны
контекст транзакций
утечки памяти в пулах потоков
необходимость вызывать remove()
сложность отладки
ThreadLocal удобен для хранения контекста потока, но требует аккуратного управления жизненным циклом.