ThreadLocal实战(二:InheritableThreadLocal)

一:InheritableThreadLocal解决了什么问题?

上文提到了ThreadLocal,但是ThreadLocal有个明显的问题,就是它无法解决父子线程传递问题

于是介绍一种新的ThreadLocal:InheritableThreadLocal

来看看测试用例:

Test

可以看到我在主线程set了一个值,在子线程拿不到它的值,当然,他们是不同的线程,可是对于上下文来说,很多场景是依赖一个共同的限界,而不希望创建子线程就丢掉这个环境,于是我们可以使用InheritableThreadLocal.

二:InheritableThreadLocal使用方式和源码

InheritableThreadLocal用法

如图,可见和上一篇ThreadLocal的用法介绍没什么两样,就是换了个api。

那么它是如何实现父子线程同步的呢。


Thread构造函数

Thread构造里调用了init方法


init方法

init方法内部实现如上图,它会判断inheritableThreadLocals是否为空,如果不空,就拷贝父线程的ThreadLocalMap给子线程。就这么简单,具体代码大家可以自己去研究

项目代码:https://github.com/Spring5945/Concurrent

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容