ThreadLocal — где пригодится и где опасен?

Ответ

Для контекста (например, SecurityContext, транзакционный контекст). Опасен с пулами потоков — значение протекает между задачами, нужен remove() в finally.

Разбор: ThreadLocal даёт каждому потоку собственную копию значения и хорошо подходит для контекста (SecurityContext, транзакционный контекст). Главная опасность — пулы потоков: поток переиспользуется, и оставленное значение «протекает» в следующую задачу, поэтому нужен remove() в finally. Дистракторы путают ThreadLocal с общим конфигом, приписывают ему роль volatile и несуществующее «переполнение» и ложно утверждают, что remove() не нужен — записи в ThreadLocalMap как раз и текут в пулах.

Хочешь так же по своей компании — с вопросами по грейдам и задачами? Закажи гайд или забери свежее в Telegram.

Заказать гайд Пройти тест
новые гайды и свежие вопросы с собесов — первыми в Telegram Смотреть гайды Подписаться