因为ThreadLocalMap的Key是软引用的,所以如果ThreadLocal不存在强引用且线程被回收的话,存储在已回收线程ThreadLocalMap中的值也是会被回收的。这一点是通过两方面来实现的:1. Key是软引用,当没有强引用指向ThreadLocal时,ThreadLocalMap的以该ThreadLocal作为key的Entry中key会在gc时被回收置为null 2. 调用ThreadLocal的set/get/remove方法的时候会触发Entry的expungeStaleEntry方法,方法会将key为null的value值回收
ThreadLocal剧集(一) (2)
内容版权声明:除非注明,否则皆为本站原创文章。