美文网首页
ThreadLocal源码剖析

ThreadLocal源码剖析

作者: superpf | 来源:发表于2019-07-16 10:22 被阅读0次

    ThreadLocal源码剖析

    ThreadLocal其实比较简单,因为类里就三个public方法:set(T value)、get()、remove()。先剖析源码清楚地知道ThreadLocal是干什么用的、再使用、最后总结,讲解ThreadLocal采取这样的思路。

    三个理论基础

    在剖析ThreadLocal源码前,先讲一下ThreadLocal的三个理论基础:

    1、每个线程都有一个自己的ThreadLocal.ThreadLocalMap对象

    2、每一个ThreadLocal对象都有一个循环计数器

    3、ThreadLocal.get()取值,就是根据当前的线程,获取线程中自己的ThreadLocal.ThreadLocalMap,然后在这个Map中根据第二点中循环计数器取得一个特定value值

    ThreadLocal的原理简单说应该是这样的:

    ThreadLocal不需要key,因为线程里面自己的ThreadLocal.ThreadLocalMap不是通过链表法实现的,而是通过开地址法实现的

    每次set的时候往线程里面的ThreadLocal.ThreadLocalMap中的table数组某一个位置塞一个值,这个位置由ThreadLocal中的threadLocaltHashCode取模得到,如果位置上有数据了,就往后找一个没有数据的位置

    每次get的时候也一样,根据ThreadLocal中的threadLocalHashCode取模,取得线程中的ThreadLocal.ThreadLocalMap中的table的一个位置,看一下有没有数据,没有就往下一个位置找

    既然ThreadLocal没有key,那么一个ThreadLocal只能塞一种特定数据。如果想要往线程里面的ThreadLocal.ThreadLocalMap里的table不同位置塞数据 ,比方说想塞三种String、一个Integer、两个Double、一个Date,请定义多个ThreadLocal,ThreadLocal支持泛型"public class ThreadLocal<T>"。 

    https://www.cnblogs.com/xrq730/p/4854820.html

    相关文章

      网友评论

          本文标题:ThreadLocal源码剖析

          本文链接:https://www.haomeiwen.com/subject/eidctctx.html