ThreadLocal的正确用法示例
时间: 2024-07-16 13:01:31 浏览: 133
ThreadLocal的用处
`ThreadLocal`是Java提供的一种线程局部变量,它的设计目的是为了解决共享数据的问题,特别是当需要为每个线程维护独立的副本时。它不会在所有线程间共享,而是每个线程都有自己的副本。下面是一个简单的`ThreadLocal`使用示例:
```java
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalExample {
private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
// 在新线程中设置值
Thread t = new Thread(() -> {
threadLocal.set(ThreadLocalRandom.current().nextInt(100));
System.out.println("Current thread's ThreadLocal value: " + threadLocal.get());
});
t.start();
// 主线程继续运行,ThreadLocal在这里不会有值
System.out.println("Main thread's ThreadLocal value: " + threadLocal.get()); // 输出null
try {
t.join(); // 等待新线程结束
} catch (InterruptedException e) {
e.printStackTrace();
}
// 新线程结束后,主线程可以看到新线程设置的值
System.out.println("Final main thread's ThreadLocal value: " + threadLocal.get()); // 可能有不同的随机数
}
}
```
在这个例子中,我们创建了一个`ThreadLocal`实例,并在线程t中设置了值。主线程无法直接访问到这个值,只有创建它的线程才能获取到。这种特性使得`ThreadLocal`非常适合那些不需要跨线程共享的数据。
阅读全文