垃圾回收:
在Thread里面有个ThreadLocalMap对象,ThreadLocalMap里面的EnTry继承了WeakReference<ThreadLocal>,垃圾回收的核心就在这个WeakReference。当CurrentThread销亡以后,ThreadLocalMap自然也会被回收,这个是很容易理解的。同时因为这里的EnTry继承了一个弱引用,当作为key的ThreadLocal被回收以后其在EnTry对应的值也会被回收。之前在想如果线程固定ThreadLocal频繁生死的时候会不会出现内存溢出的问题,事实证明即使这样也不会有内存溢出的问题,当然我想的这种情况在现实中应该也不会用到。
与同步对比:
Synchronized实现线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。
实例:
public class EnvUtils {
public static Env getEnv() {
return threadLocal.get();
}
public static void removeEnv() {
threadLocal.remove();
}
private static ThreadLocal<Env> threadLocal = new ThreadLocal<Env>() {
@Override
protected Env initialValue() {
return new Env();
}
};
}
转载于:https://blog.51cto.com/gudaoqing/1429750