如何使用threadlocal
时间: 2023-11-07 12:58:04 浏览: 40
ThreadLocal是一个线程局部变量,它可以在不同的线程中存储不同的值。它通常用于解决多线程并发访问共享变量的问题,每个线程都有自己独立的变量副本,互不干扰。
下面是使用ThreadLocal的示例代码:
```java
public class Demo {
private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
public static void main(String[] args) {
new Thread(() -> {
int num = threadLocal.get();
for (int i = 0; i < 5; i++) {
num++;
threadLocal.set(num);
System.out.println(Thread.currentThread().getName() + " : " + threadLocal.get());
}
}, "Thread-1").start();
new Thread(() -> {
int num = threadLocal.get();
for (int i = 0; i < 5; i++) {
num--;
threadLocal.set(num);
System.out.println(Thread.currentThread().getName() + " : " + threadLocal.get());
}
}, "Thread-2").start();
}
}
```
在上面的代码中,我们定义了一个ThreadLocal变量,初始值为0。然后我们启动两个线程,每个线程都对这个变量进行操作,但它们之间互不干扰。我们可以看到,每个线程都有自己的变量副本,互不影响。
输出结果如下:
```
Thread-1 : 1
Thread-1 : 2
Thread-1 : 3
Thread-1 : 4
Thread-1 : 5
Thread-2 : -1
Thread-2 : -2
Thread-2 : -3
Thread-2 : -4
Thread-2 : -5
```
在这个示例中,我们使用了ThreadLocal的get()和set()方法来获取和设置变量的值,这些方法都是线程安全的。
需要注意的是,ThreadLocal变量在使用完后一定要清理,否则可能会导致内存泄漏。可以通过调用ThreadLocal的remove()方法来清理线程局部变量。