Java并发之ThreadLocal和InheritableThreadLoacal

来源:互联网 发布:淘宝网中老年冬季服装 编辑:程序博客网 时间:2024/05/20 04:09

      Java可用ThreadLocal的set方法存储当前Thread的一些私有变量或数据,实现原理即为将当前Thread对象做为key,调用set方法,将value存入map对象中,get时根据当前Thread对象取到对应的value值,因此各个Thread只能取到自己的value。

      而InHeritableThreadLocal可以取到父Thread中的值,主要原因是因为在new Thread时,会调用初始化方法init,在init方法中会判断当前Thread是否有Parent Thread,如果有,则将其inheritableThreadLocals中的对象复制到当前Thread的InHeritableThreadLocal对象中,注意这里复制是指针地址复制. 如下所示:

     

       因此InHeritableThreadLocal可以访问到父Thread的InHeritableThreadLocal里的值;

   但父Thread设置InHeritableThreadLocal时,一定要在创建子Thread之前设置,如果在new Thread之后再进行InHeritableThreadLocal的set,则子Thread仍然无法取到对应的父Thread的值;



原创粉丝点击