failed to remove it when the web application was stopped. Threads are going to be renewed over time

該error的原因:


 tomcat關閉應用時的清理工作(3): ThreadLocal

這個泄露其實是可能造成classloader的泄露,因爲ThreadLocal引用了自定義的類MyClass,綁定到了當前的請求線程上,而請求線程又是線程池裏的線程,生存週期可能會比較長。比如上面模擬的情況,要停止應用的時候,請求線程的ThreadLocal仍未釋放,那麼即使加載MyClass類的classLoader已經不會再被任何地方使用,可以被垃圾回收了,卻因爲這個MyClass被引用而得不到回收。


解決方案:


private static ThreadLocal<MyClass> tl = new ThreadLocal<MyClass>();

try{
// doSomething()
} finally {
tl.remove();
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章