ThreadLocal — опасность?

Ответ

С пулами потоков: поток переиспользуется, ThreadLocal остаётся от предыдущей задачи (утечка данных/памяти). Обязательно: try { ... } finally { threadLocal.remove(); }. В Reactor/WebFlux — не работает, нужен Context.

Разбор: В пуле потоки переиспользуются, и значение ThreadLocal от предыдущей задачи остаётся доступным следующей — это и утечка данных, и утечка памяти, поэтому обязателен remove() в finally. Никакого автоочищения executor не делает; таблица threadLocals принадлежит конкретному потоку, а не разделяется. В реактивном стеке выполнение перескакивает между потоками, поэтому ThreadLocal ненадёжен — нужен Reactor Context.

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

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