美文网首页
源码 InheritableThreadLocal(作用域扩散)

源码 InheritableThreadLocal(作用域扩散)

作者: sha4yu0119 | 来源:发表于2020-04-26 16:27 被阅读0次

继上篇文章《源码 ThreadLocal (线程私有变量)》后,我们明白了ThreadLocal是如何实现线程私有化变量。我们来看下 InheritableThreadLocal 是如何实现在父子线程内传递的。

父子线程这里是指当前线程以及在当前线程中创建的所有线程具有父子关系。当前线程与创建当前线程的线程具有父子关系。

InheritableThreadLocal 其实只复写了 childValue getMap createMap 三个方法。将ThreadLocal 中实际操作的数据结构由 Thread.threadLocals 变成了 Thread.inheritableThreadLocals

而该成员在 Thread::init 方法中被传递给子线程,关键代码如下

private void init (ThreadGroup g, Runnable target, String name,
                      long stackSize, AccessControlContext acc,
                      boolean inheritThreadLocals) {
    ...code...
    if (inheritThreadLocals && parent.inheritableThreadLocals != null)
            this.inheritableThreadLocals =
                ThreadLocal.createInheritedMap(parent.inheritableThreadLocals);
    ...code...
}

简单扩展

阿里的开源工具# transmittable-thread-local支持更复杂的线程变量互享场景。

相关文章

  • 源码 InheritableThreadLocal(作用域扩散)

    继上篇文章《源码 ThreadLocal (线程私有变量)》后,我们明白了ThreadLocal是如何实现线程私有...

  • 作用域和闭包

    1.理解词法作用域和动态作用域 作用域 静态作用域 作用域是指程序源码中定义变量的区域作用于规定如何查找变量,也就...

  • 聊一聊JS中的作用域链

    JavaScript是基于词法作用域的语言:通过阅读包含变量定义在内的数行源码就能知道变量的作用域。作用域:即变量...

  • 作用域链(Scope Chain)

    JavaScript是基于词法作用域的语言:通过阅读包含变量定义在内的数行源码就能知道变量的作用域。全局变量在程序...

  • js作用域

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 作用域,作用域链

    1 - 作用域 1.1 作用域概述 全局作用域 局部作用域(函数作用域) 1.2 全局作用域 1.3 局部作用域 ...

  • 变量作用域

    变量作用域:静态作用域、动态作用域JS变量作用域:JS使用静态作用域JS没有块级作用域(全局作用域、函数作用域等)...

  • 一网打尽 JavaScript 的作用域

    JavaScript 的作用域包括:模块作用域,函数作用域,块作用域,词法作用域和全局作用域。 全局作用域 在任何...

  • 作用域

    词法作用域,动态作用域,全局作用域,局部作用域,函数作用域,块级作用域,有些地方还能看到隐式作用域和显示作用域。 ...

  • JS的作用域

    JS的作用域: 全局作用域、函数作用域、eval 作用域、块级作用域 全局作用域: 函数作用域: 结果截屏: 说...

网友评论

      本文标题:源码 InheritableThreadLocal(作用域扩散)

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