ThreadLocal如何解决父子线程间通信问题?(上下文传递)
ThreadLocal
提供一个方便的方式以便于一个线程存储数据,而该数据只有在该线程以及创建它的父线程中可见,不会被其他线程访问到。这样,你可以使用 ThreadLocal
来传递父线程中的数据到子线程中,以解决父子线程间的通信问题。
以下是一个简单的例子,展示如何使用 ThreadLocal
来实现数据从父线程传递到子线程:
public class ThreadLocalExample {
private static final ThreadLocal<String> parentData = new ThreadLocal<>();
public static void main(String[] args) {
// 在父线程中设置数据
parentData.set("父线程数据");
// 创建并启动子线程
Thread childThread = new Thread(new Runnable() {
@Override
public void run() {
// 子线程可以获取到父线程设置的数据
String dataFromParent = parentData.get();
System.out.println("子线程接收到的数据: " + dataFromParent);
// 子线程设置自己的数据
parentData.set("子线程数据");
// 输出当前线程的数据,并清除
System.out.println("子线程数据已清除: " + parentData.get());
parentData.remove();
}
});
childThread.start();
// 清除父线程的数据
parentData.remove();
}
}
在这个例子中,parentData
是一个 ThreadLocal
变量,它在父线程中被设置了值,并在子线程中被获取。通过这种方式,你可以在不需要使用其他同步机制的情况下,安全地在父子线程间传递数据。
评论已关闭