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

Ответ

Удобен для контекста (например, SecurityContext). Опасен при использовании с пулами потоков — значение «протекает» между задачами. Обязательно remove() в finally.

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

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

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