threadlocal的使用举个例子
时间: 2024-08-15 16:01:03 浏览: 25
`ThreadLocal`是Java提供的一种线程本地变量,它的每个线程都有自己的副本,互不影响。这意味着当你在一个线程中修改ThreadLocal的值,其他线程不会受到影响。下面是一个简单的例子:
```java
import java.util.concurrent.ThreadLocalRandom;
public class ThreadLocalExample {
// 创建一个ThreadLocal实例
private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
// 在主线程中设置ThreadLocal的值
threadLocal.set(10);
// 启动新线程
Thread thread1 = new Thread(() -> {
// 在新线程中,threadLocal有自己的副本,所以能看到不同的值
int localValue = threadLocal.get();
System.out.println("Thread 1: " + localValue); // 输出可能不是10
// 新线程也可以独立地设置自己的ThreadLocal值
threadLocal.set(20);
System.out.println("Thread 1: After setting in thread " + localValue); // 输出20
});
// 同样,在主线程中设置另一个值
threadLocal.set(30);
thread1.start();
// 主线程继续执行,查看自己的ThreadLocal值
int mainValue = threadLocal.get();
System.out.println("Main thread: " + mainValue); // 输出30
}
}
```
在这个例子中,尽管主线程设置了两次`threadLocal`,但新启动的线程会创建自己的副本,因此可以看到不同的值。每个线程只能看到自己线程局部变量的变化。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)