Java 中的 InheritableThreadLocal 是什么?
Java 中的 InheritableThreadLocal 是什么?
回答重点
InheritableThreadLocal 是 ThreadLocal 的一个扩展,用于在线程创建时将父线程的 ThreadLocal 变量副本传递给子线程,使得子线程可以访问父线程中设置的本地变量。它解决了 ThreadLocal 无法在子线程中继承父线程本地变量的问题。
工作原理:
- 当创建子线程时,
InheritableThreadLocal的值会被自动拷贝到子线程中。 - 子线程可以修改自己的副本,但不会影响父线程的值。
扩展知识
源码分析
原理其实很简单,在 Thread 中已经包含了这个成员:

在父线程创建子线程的时候,子线程的构造函数可以得到父线程,然后判断下父线程的 InheritableThreadLocal 是否有值,如果有的话就拷过来。

这里要注意,只会在线程创建的时会拷贝 InheritableThreadLocal 的值,之后父线程如何更改,子线程都不会受其影响。
示例代码
使用方式和 ThreadLocal 一致,无非就是将类替换成 InheritableThreadLocal 即可。
1 | public class InheritableThreadLocalExample { |
Comments