【发布时间】:2016-06-12 05:58:31
【问题描述】:
我的 Web 应用程序中有一个静态 ThreadLocal 对象,我在处理请求之前使用 Web servlet 过滤器类中的一些默认值进行初始化。在应用程序中,其他几个类(如处理器)使用并更新其值。我在一些文章中读到,尽管请求过程已完成,但使用 ThreadLocal 创建的对象仍与线程相关联因为线程维护在由容器管理的池中。如果没有从 ThreadLocal 变量中删除对象,这会导致内存泄漏。
在这方面我有两个问题。
-
在以下选项中,哪一个是删除其引用以防止内存泄漏的最佳且正确的方法。
ThreadLocal obj; 1) obj.remove(); // remove the contents of ThreadLocal. 2) obj.set(""); // set some default value 3) obj.set(null); // set null
【问题讨论】:
-
(1)的答案是(1),或者让线程退出。第二个问题看不懂。
-
改写了我的第二个问题?
标签: java multithreading web servlet-filters thread-local