ThreadLocal以及强软弱虚引用

一、ThreadLocaljvm

ThreadLocal即线程本地,能够实现每一个线程存入取出TreadLocal值互不影响。由于TheadLocal底层是用了一个Map存放数据,而这个Map是从当前这个Thread中获取的,因此每一个线程以前数据不相通。线程

而这个Map里面key是这个TreadLocal,因此一个线程只能在一个ThreadLocal中存放一个值,要想继续存放就得多建立ThreadLocal。3d

 

这个Map底层是一个Entry,这个Entry又继承自  WeakReference<ThreadLocal<?>>。因此Entry里面的Key指向ThreadLocal的引用是一个弱引用,目的是为了防止内存泄漏。对象

                                         

                                             

 

二、强软弱虚引用blog

强引用:只要这个引用存在就不会被垃圾回收器回收继承

软引用:当引用为空或者jvm中堆内存不够就会被回收队列

弱引用:只要垃圾回收器进行gc就会被回收内存

虚引用:用于堆外内存,当堆外内存中一个虚引用被回收,这个虚引用会进入一个队列中,jvm经过这个队列就知道有对象被回收了,就会收回这块内存。内存泄漏

    固然虚引用也是碰到gc就会被回收。垃圾回收