是否值得清理过滤器中的线程Local来解决与线程池相关的问题?
2022-09-04 04:12:00
简而言之 - tomcat使用线程池,因此线程被重用。一些库使用变量,但不清理它们(使用),所以实际上它们将“脏”线程返回到池中。ThreadLocal
.remove()
Tomcat 具有在关机时检测这些内容以及清理线程局部变量的新功能。但这意味着线程在整个执行过程中是“脏的”。
我能做的是实现一个,并在请求完成后(线程返回到池中),使用tomcat中的代码(那里的方法称为)清理所有s。Filter
ThreadLocal
checkThreadLocalsForLeaks
问题是,这值得吗?两个优点:
- 防止内存泄漏
- 防止库的不确定行为,这些行为假设线程是“新鲜的”
一个缺点:
- 该解决方案使用反射,因此可能会很慢。当然,所有反射数据都将被缓存,但仍然如此。
Field
另一种选择是将问题报告给不清理其线程局部变量的库。