ThreadLocal引用分析

简介: ThreadLocal引用分析

一 ThreadLocal概念

ThreadLocal学名线程本地变量,顾名思义,那就是私有的线程变量

二 ThreadLocal源码分析

private void set(ThreadLocal key, Object value) {

    // We don't use a fast path as with get() because it is at
    // least as common to use set() to create new entries as
    // it is to replace existing ones, in which case, a fast
    // path would fail more often than not.

    Entry[] tab = table;
    int len = tab.length;
    int i = key.threadLocalHashCode & (len-1);
    

我们看到其实他的数据结构是散列表的数组,有没有想起老朋友HashMap,但是,嘿嘿,他们不一样。
接着我们看看组成他的数组,数组的类型是Entry,这个是什么东西呢,我们看看他的源码

   static class Entry extends WeakReference {
        /** The value associated with this ThreadLocal. */
        Object value;

        Entry(ThreadLocal k, Object v) {
            super(k);
            value = v;
        }
    }
    

## 三 引用类别

大家看到了继承WeakReference了吗?小伙伴们知道他是啥吗? 他就是java的几种引用之一,java的引用分为
强引用,软引用,弱引用以及虚引用

  • 强引用

      Object obj = new Object(); //只要obj还指向Object对象,Object对象就不会被回收
    

    只要强引用存在,垃圾回收器将永远不会回收被引用的对象,哪怕内存不足时,JVM也会直接抛出OutOfMemoryError,不会去回收。如果想中断强引用与对象之间的联系,可以显示的将强引用赋值为null,这样一来,JVM就可以适时的回收对象了

  • 软引用

    SoftReference<byte[]> sr = new SoftReference<>(buff);
    

    软引用是用来描述一些非必需但仍有用的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。这种特性常常被用来实现缓存技术,比如网页缓存,图片缓存等

  • 弱引用

    弱引用的引用强度比软引用要更弱一些,无论内存是否足够,只要 JVM 开始进行垃圾回收,那些被弱引用关联的对象都会被回收。在 JDK1.2 之后,用 java.lang.ref.WeakReference 来表示弱引用

  • 虚引用

    PhantomReference是一种极弱的引用关系,定义完成后就无法通过该引用获取对象,为对象设定虚引用的唯一目的就是为了对象被回收时收到一个系统通知。

相关文章
|
4月前
|
存储 Java 数据挖掘
来聊聊ThreadLocal内存泄露分析
来聊聊ThreadLocal内存泄露分析
|
4月前
|
存储 安全 Java
ThreadLocal原理讲解
ThreadLocal原理讲解
23 0
|
9月前
|
Java
ThreadLocal全面解析
ThreadLocal全面解析
74 0
|
5月前
|
存储 算法 Java
全面理解ThreadLocal(详细简单)(二)
全面理解ThreadLocal(详细简单)
26 0
全面理解ThreadLocal(详细简单)(二)
|
5月前
|
存储 Java 数据库
全面理解ThreadLocal(详细简单)(一)
全面理解ThreadLocal(详细简单)
32 0
全面理解ThreadLocal(详细简单)(一)
|
7月前
|
Java
对象的相等和引用相等的区别
对象的相等和引用相等的区别
|
8月前
|
Java
ThreadLocal内存泄露分析
ThreadLocal内存泄露分析
57 0
|
10月前
|
安全 Java
变量的线程安全分析
变量的线程安全分析
|
存储 Java
全面分析!ThreadLocal内存泄漏的原因!
全面分析!ThreadLocal内存泄漏的原因!
|
Java 定位技术
ThreadLocal原理
经典八股文之ThreadLocal原理
151 0