threadLocal 使用
时间: 2023-10-30 08:05:27 浏览: 107
ThreadLocal是Java中的一个线程封闭的变量,它提供了线程本地变量的机制。可以将ThreadLocal对象与任意类型的值关联起来,并且这个值对于不同的线程是互相隔离的。每个线程都拥有自己独立的副本,它们可以独立地读写变量,而不会互相影响。
使用ThreadLocal的步骤如下:
1. 创建一个ThreadLocal对象,指定泛型类型,用于存储线程本地变量。
2. 通过ThreadLocal对象的set方法,为当前线程设置一个值。
3. 在需要使用该线程本地变量的代码中,通过ThreadLocal对象的get方法获取当前线程的值。
4. 在不需要使用该线程本地变量时,可以通过ThreadLocal对象的remove方法清除当前线程的值。
下面是一个简单示例:
```java
public class ThreadLocalExample {
private static final ThreadLocal<String> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
// 在主线程中设置线程本地变量的值
threadLocal.set("Hello, world!");
// 创建两个新线程
Thread thread1 = new Thread(new MyRunnable());
Thread thread2 = new Thread(new MyRunnable());
// 启动新线程
thread1.start();
thread2.start();
}
static class MyRunnable implements Runnable {
@Override
public void run() {
// 在新线程中获取线程本地变量的值
String value = threadLocal.get();
System.out.println("Thread local value: " + value);
}
}
}
```
在上面的示例中,通过ThreadLocal对象设置了线程本地变量的值为"Hello, world!",然后创建了两个新线程,在新线程中分别获取了线程本地变量的值,输出结果是:
```
Thread local value: null
Thread local value: null
```
由于每个线程都拥有自己独立的线程本地变量副本,所以在新线程中获取到的值为null。如果想要在新线程中获取到主线程设置的值,可以在新线程中也通过ThreadLocal对象set方法设置一个值。这样,每个线程都可以独立地读写自己的线程本地变量,互不干扰。
阅读全文