TransmittableThreadLocal 继承自 InheritableThreadLocal,这样可以在不破坏ThreadLocal 本身的情况下,使得当用户利用 new Thread() 创建线程时仍然可以达到传递InheritableThreadLocal 的目的。
时间: 2024-08-05 21:01:36 浏览: 48
`TransmittableThreadLocal` 是 `java.util.concurrent` 包下的一个类,它继承自 `InheritableThreadLocal`。这个设计允许你在创建新线程时保持 `ThreadLocal` 的状态,而不会丢失之前线程的值。`InheritableThreadLocal` 类允许子线程继承父线程的 `ThreadLocal` 值,这是通过实现 `Thread.UncaughtExceptionHandler` 接口来完成的。
当你在一个线程(主线程)中设置了一个 `InheritableThreadLocal` 的变量,如果在这个线程上执行 `new Thread()` 并传递 `Thread.UncaughtExceptionHandler`,那么新线程会继承原始线程的 `ThreadLocal` 值。这在需要跨线程共享某些信息,但又不想让每个线程都有独立 `ThreadLocal` 存储空间的情景下非常有用。
下面是一个简单的示例:
```java
// 创建一个继承自 InheritableThreadLocal 的实例
InheritableThreadLocal<String> local = new InheritableThreadLocal<>();
// 在主线程中设置值
local.set("Hello from parent thread");
// 创建并启动新线程
Thread childThread = new Thread(() -> {
// 新线程可以直接访问并使用父线程的值
String inheritedValue = local.get();
System.out.println("Inherited value in child thread: " + inheritedValue);
}, "Child Thread");
childThread.start();
// 注意,如果不设置 UncaughtExceptionHandler,子线程默认不会继承父线程的 ThreadLocal 值
```
阅读全文