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就会被回收。

 

posted @ 2020-09-09 10:41  zcr小翟  阅读(921)  评论(0编辑  收藏  举报