Стоит ли чистить ThreadLocals в фильтре для решения проблем, связанных с пулом потоков?

Короче говоря, tomcat использует пул потоков, поэтому потоки используются повторно. Некоторые библиотеки используют переменные ThreadLocal , но не очищают их (используя .remove () ), поэтому фактически они возвращают «грязные» потоки в пул.

Tomcat имеет новые возможности обнаружения этих вещей при завершении работы и очистки локальных переменных потока. Но это означает, что потоки "грязные" на протяжении всего выполнения.

Что я могу сделать, так это реализовать Фильтр , и сразу после завершения запроса (и потока возврата в пул) очистить все ThreadLocal с использованием кода из tomcat (там метод называется checkThreadLocalsForLeaks ).

Вопрос в том, стоит ли оно того? Два преимущества:

  • предотвращение утечек памяти
  • предотвращение недетерминированного поведения библиотек, которые предполагают, что поток "

10
задан k0pernikus 16 November 2012 в 12:06
поделиться