java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > ThreadLocal和InheritableThreadLocal解析

关于ThreadLocal和InheritableThreadLocal解析

作者:Old Wang

这篇文章主要介绍了关于ThreadLocal和InheritableThreadLocal解析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、两者区别

二、原理

这里要先说另一个概念ThreadLocalMap。他和普通map差不多,也是key-value结构,key为threadlocal对象,value为你设置的值。

为什么这里要用map,因为可能有多个ThreadLocal对象。所以这个map可以理解为仓库,存储数据的仓库。

在Thread类我们可以看到如下分别创建2个 ThreadLocalMap对象。用来存储数据。

继续追踪,查找它是什么时候被赋值的(分为ThreadLocal实现和InheritableThreadLocal实现)。

OK,我们知道是怎么赋值的,那么InheritableThreadLocal是怎么做到继承(值传递)的呢?

在Thread的init方法里我们看到如下的赋值语句:

在初始化时候获取当前线程的inheritableThreadLocals(这是新线程的初始化,但是currentThread获取的还是老线程),把它赋值到新线程的属性里去,这样新线程就有值了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文