TransmittableThreadLocal 主线程和分线程多次传值 代码案例
时间: 2024-10-29 08:05:57 浏览: 24
`TransmittableThreadLocal` 是 Java 中的一个工具类,它允许在 ThreadLocal 中存储可以序列化的数据,并能在主线程和子线程之间传递。通常用于需要跨线程共享信息并且这个信息能够被序列化的情况。
`ThreadLocal` 的默认行为是在每个线程创建一个新的副本,而 `TransmittableThreadLocal` 则提供了一种机制,可以在主线程设置值后,在其他线程中获取到相同的值,而不是新的独立副本。
下面是一个简单的代码示例:
```java
import com.google.common.util.concurrent.TransmittingThreadLocal;
import java.io.Serializable;
public class TransmittableThreadLocalExample {
// 使用TransmittingThreadLocal
private static final TransmittingThreadLocal<Serializable> value = new TransmittingThreadLocal<>();
public static void main(String[] args) {
// 在主线程中设置值
value.set(new MyClass()); // MyClass 是一个实现了Serializable接口的对象
// 创建一个新线程,该线程可以访问主线程设置的值
Runnable worker = () -> {
Serializable actualValue = value.get(); // 获取并打印主线程设置的值
System.out.println("Worker thread received: " + actualValue);
};
new Thread(worker).start();
}
}
class MyClass implements Serializable {
//...
}
```
在这个例子中,`value.get()` 在主线程和工作线程中返回的是同一个 `MyClass` 实例,展示了跨线程的数据共享。
阅读全文