• 技术文章 >java >java基础

    java threadLocal源码探究

    小妮浅浅小妮浅浅2021-01-11 17:57:51原创2689

    有些人对使用ThreadLocal的使用不是很理解,这里还要从原理讲起。我们可以在其中找到许多方法,ThreadLocal可以加名称后面加入一些方法,然后结合在一起使用,可以把它看成方法的汇集。下面我们就以ThreadLocalMap使用为例,对ThreadLocal源码进行探索和分析。

    1.ThreadLocal的内部结构

    ThreadLocal并不维护ThreadLocalMap,并不是一个存储数据的容器,它只是相当于一个工具包,提供了操作该容器的方法,如get、set、remove等。而ThreadLocal内部类ThreadLocalMap才是存储数据的容器,并且该容器由Thread维护。

    2.ThreadLocalMap实例

    static class ThreadLocalMap {
       /**
        * The entries in this hash map extend WeakReference, using
        * its main ref field as the key (which is always a
        * ThreadLocal object).  Note that null keys (i.e. entry.get()
        * == null) mean that the key is no longer referenced, so the
        * entry can be expunged from table.  Such entries are referred to
        * as "stale entries" in the code that follows.
        */
        static class Entry extends WeakReference<ThreadLocal<?>> {
           /** The value associated with this ThreadLocal. */
           Object value;
           Entry(ThreadLocal<?> k, Object v) {
               super(k);
               value = v;
           }
        }
        //还有很多很多
    }

    我们可以看到ThreadLocalMap其实就是ThreadLocal的一个静态内部类,里面定义了一个Entry来保存数据,而且还是继承的弱引用。在Entry内部使用ThreadLocal作为key,使用我们设置的value作为value。

    3.ThreadLocal源码总结

    (1)每个Thread维护着一个ThreadLocalMap的引用。

    (2)ThreadLocalMap是ThreadLocal的内部类,用Entry来进行存储。

    3)ThreadLocal创建的副本是存储在自己的threadLocals中的,也就是自己的ThreadLocalMap。

    (4)ThreadLocalMap的键值为ThreadLocal对象,而且可以有多个threadLocal变量,因此保存在map中。

    以上就是java中关于threadLocal源码探究,相信大家已经能够理论threadLocal使用的原理。把threadLocal作为其他方法的使用基础,然后可以结合起来带来更多的使用。

    专题推荐:java threadlocal源码
    上一篇:对象头在java中的结构有哪几种 下一篇:java中executor是什么意思

    相关文章推荐

    • synchronized在java的优缺点• java中对象头的用法• 对象头在java中的结构有哪几种

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网