如果您不打算在服务器环境中进行部署,即使应用程序使用了缓存的线程池,是否需要在本地线程上调用remove?
public static ThreadLocal<Integer> i = new ThreadLocal<Integer>(){{
public Integer initialValue(){return 3;}
};
最佳答案
从理论上讲,如果Thread
和ThreadLocal
都仍在播放,则该值将可达到。如果其中任何一个都不可达,则从理论上讲,如果未引用,则该值是垃圾可收集的。但是,OpenJDK中存在一个错误,这意味着如果该值引用了ThreadLocal
(令人惊讶的是常见的)并且Thread
仍在运行,则会泄漏。
所以是的,从某种意义上说,服务器环境没有什么特别的。但是,通常在开发过程中反复重新加载代码的情况下,常常会出现ThreadLocal
从值(值到值的类,类的类装入器到所有类)可访问的情况。通过类加载器将这些类永久加载到ThreadLocal
)。 Java Bean和JDBC的实现可能有类似的问题。
关于java - 线程本地删除方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13257224/