ThreadLocal以及强软弱虚引用
1、ThreadLocal
ThreadLocal即线程本地,可以实现每个线程存入取出TreadLocal值互不影响。因为TheadLocal底层是用了一个Map结构存放数据,而这个Map是从当前这个Thread中获取的,所以每个线程之前数据不相通。
而这个Map里面key是这个TreadLocal,所以一个线程只能在一个ThreadLocal中存放一个值,要想继续存放就得多创建ThreadLocal。
这个Map底层是一个Entry,这个Entry又继承自 WeakReference<ThreadLocal<?>>。所以Entry里面的Key指向ThreadLocal的引用是一个弱引用,目的是为了防止内存泄漏。
2、强软弱虚引用
强引用:只要这个引用存在就不会被垃圾回收器回收
软引用:当引用为空或者jvm中堆内存不够就会被回收
弱引用:只要垃圾回收器进行gc就会被回收
虚引用:用于堆外内存,当堆外内存中一个虚引用被回收,这个虚引用会进入一个队列中,jvm通过这个队列就知道有对象被回收了,就会收回这块内存。
当然虚引用也是碰到gc就会被回收。