Удаление объектов threadLocal в потоках Tomcat во время закрытия приложения
Я работаю над веб-службой и создаю локальные экземпляры потока и хочу удалить их только во время завершения работы приложения (после создания локального объекта потока для потока я хочу использовать этот объект во время различных вызовов службы в этом потоке). Поскольку потоки создаются и принадлежат tomcat, есть ли способ удалить эти локальные потоки во время завершения работы приложения?
1 ответ
Tomcat 6 имеет обнаружение утечки памяти, а Tomcat 7 имеет действительную логику удаления - он автоматически удалит все локальные объекты потока для вас: http://wiki.apache.org/tomcat/MemoryLeakProtection
В идеале вы должны удалить все объекты из локального потока после завершения запроса, поскольку тот же поток будет возвращен в пул потоков и использован для обслуживания других запросов - в этом случае локальные значения потока могут мешать последующей логике запроса и вызывать все вопросы безопасности.
Но если вы специально хотите хранить значения в локальном потоке на протяжении всего срока службы веб-приложения Tomcat - Tomcat 7 позаботится о том, чтобы очистить его для вас при завершении работы веб-приложения, считайте его сборкой мусора.