Boz*_*zho 14 java multithreading tomcat servlets
简而言之 - tomcat使用线程池,因此可以重用线程.有些库使用ThreadLocal
变量,但不清理它们(使用.remove()
),所以实际上它们会将"脏"线程返回到池中.
Tomcat具有在关闭时检测这些内容以及清理线程本地的新功能.但这意味着线程在整个执行过程中都是"脏"的.
我能做的是实现a Filter
,并在请求完成后(并将线程返回到池中)ThreadLocal
,使用tomcat中的代码(调用的方法)清除所有s checkThreadLocalsForLeaks
.
问题是,值得吗?两个优点:
一个骗局:
Field
当然,所有反射数据都将被缓存,但仍然如此.另一种选择是将问题报告给不清除其线程本地的库.
我会通过以下两个原因通过向图书馆开发人员报告问题的途径:
老实说,我之前从未见过这种类型的错误,我认为这是一个例外,而不是我们应该保护的事情,因为它经常发生.你能分享一下你见过这种行为的图书馆吗?
作为旁注,我不介意在开发/测试环境中启用该过滤器,并在仍附加ThreadLocal变量时记录严重错误.