ThreadLocal 向线程内传值
时间: 2024-10-28 12:01:09 浏览: 18
Java多线程编程之ThreadLocal线程范围内的共享变量
ThreadLocal是一种特殊的线程局部变量存储机制,它为每个线程提供了一个独立的副本,这意味着在一个线程中创建的ThreadLocal实例,对其他线程来说是不可见的。当你在一个线程中设置ThreadLocal的值时,只有在这个特定线程中设置的值才会生效,其他线程会看到默认的初始值或者null。
使用ThreadLocal的主要优点在于避免了同步问题,因为它为每个线程维护了私有的副本,所以在高并发场景下,如果多个线程独立地操作ThreadLocal,可以避免数据竞争和同步开销。下面是一个简单的例子:
```java
import java.lang.ThreadLocal;
public class ThreadLocalExample {
// 创建一个ThreadLocal实例
private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
// 在主线程中设置值
threadLocal.set("Hello from Main");
// 新建一个线程
Thread thread = new Thread(() -> {
try {
// 在新线程中访问ThreadLocal的值,这里看到的是主线程设置的值
System.out.println(threadLocal.get()); // 输出 "Hello from Main"
} catch (Exception e) {
e.printStackTrace();
}
});
thread.start();
// 在主线程中再次设置值,新线程不会看到这个改变
threadLocal.set("New value");
}
}
```
在这种情况下,main线程设置的ThreadLocal值只会在那个线程中可见,新线程会继续使用最初的“Hello from Main”。
阅读全文