java - 在应用程序关闭时删除 tomcat 线程上的 threadLocal 对象

标签 java tomcat threadpool thread-local

我正在处理 Web 服务并创建线程本地实例,并且只想在应用程序关闭期间删除它们(一旦为线程创建了线程本地对象,我想在该线程上的不同服务调用期间使用该对象)。由于线程是由 tomcat 创建和拥有的,有没有办法在应用程序关闭期间删除这些线程局部变量?

最佳答案

Tomcat 6 具有内存泄漏检测功能,而 Tomcat 7 具有实际的删除逻辑 - 它会自动为您删除所有线程本地对象:http://wiki.apache.org/tomcat/MemoryLeakProtection

理想情况下,您应该在请求完成后从线程本地删除所有对象,因为同一个线程将被放回线程池并用于服务其他请求 - 在这种情况下,线程本地值可能会干扰后续请求逻辑,并导致各种安全问题。

但如果您特别希望在 Tomcat webapp 的整个生命周期内将值保存在本地线程中 - Tomcat 7 将在 webapp 关闭时为您清理它,将其视为垃圾收集。

关于java - 在应用程序关闭时删除 tomcat 线程上的 threadLocal 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22244345/

相关文章:

java - subList() 与其他类似的 Collections 方法有不同的行为,一旦 subList 被改变

java - 在Java中将数组转换为列表

maven - 部署 gwtp hello world

android - RXJava - 线程优先级

java - 调度任务 vs 忙等待

java - 将字符串的第一个数字与 4 匹配的正则表达式。

java - 连接wifi热点手机报错: ENETUNREACH

tomcat - 获取登录tomcat的权限被拒绝

java - 从表单调用 servlet 不起作用

multithreading - 如果我的程序有更多线程,它会获得更多的 CPU 时间吗