ThreadLocal学习:
实线代表强引用,虚线代表弱引用
每一个Thread维护一个ThreaLocalMap,key为使用弱引用的ThreaLocal实例,value为线程变量的副本。
强引用:使用最普遍的引用,一个对象具有强引用,不会被垃圾回事器回收。当内存空间不足,Java虚拟机宁愿OutMemoryError错误,使程序异常终止,也不回事这种对象。
如果想取消强引用和某个对象的之间的关联,可以显式地将引用赋值为null,这样可以使JVM在合适的时机就会回收该对象。
弱引用:JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。在Java中java.long.ref.WeakReference类来表示。
例如:
- 为了在Controller中直接获取用户的信息ThreadLocal保存登录用户信息,ThreadLocal中用完的信息,需要remove(),不然会有内存泄漏的风险。