美文网首页
ThreadLocal的使用

ThreadLocal的使用

作者: 逍遥德道 | 来源:发表于2020-05-18 14:48 被阅读0次


    在不同线程中保存同一种类型的不同对象

    如上图:在main线程中初始化,在main线程获取就是“张三”。在thread1设置“李四”,在thread1中获取就是“李四”,不会更改main线程中的“张三”。

    原理:

    ThreadLocal中

    步骤1:获取当前线程 Thread t,

    步骤2:根据当前线程 t 获取ThreadLocalMap

    获取到的threadLocals在Thread类中被定义,是Thread类中的属性

    在获取的时候获取当前线程 t,获取线程中的map,获取map中存储的value值。

    疑惑:通过set方法与get方法看上去很像hashmap中的key,value形式以 thread为key,存储value。

    解答:在set与get方法中都有ThreadLocalMap map = getMap(t),把这句换成

    ThreadLocalMap map = t.threadLocals。就明白获取的是thread中的ThreadLocalMap。在不同线程中当然有不同的ThreadLocalMap对象,获取的值也是不同的。

    ThreadLocalMap类中的Entry类是用来真正保存数据的存储的数据格式为:key为ThreadLocal<?> ,value为object。为什么?这是用来存储多个ThreadLocal。一个ThreadLocal只能存储一种如String,想存储Integer就再new一个。

    总结:用我们熟悉的面向对象来写

    class Thread{

          private Map map = new Map();

          set(){

            map.put();

        }

          get(){

            return map.get();

        }

    }

    Thread thread=new Thread();

    thread.set()

    thread.get()//获取的数据就是上面set的数据

    相关文章

      网友评论

          本文标题:ThreadLocal的使用

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