ThreadLocal用法
时间: 2023-06-28 13:12:07 浏览: 129
ThreadLocal是Java中一个线程本地变量,它提供了一种将数据与线程关联的方式。每个线程都有自己的ThreadLocal变量,可以独立地修改它,而不会影响其他线程的变量值。
ThreadLocal的使用步骤如下:
1. 创建一个ThreadLocal对象。
2. 重写initialValue()方法,它会返回ThreadLocal对象的初始值。
3. 调用ThreadLocal的get()方法获取当前线程的变量值。
4. 调用ThreadLocal的set()方法设置当前线程的变量值。
5. 在线程结束前,一定要调用ThreadLocal的remove()方法,清除当前线程的变量值,避免内存泄漏。
下面是一个简单的示例代码:
```
public class ThreadLocalDemo {
private static ThreadLocal<String> threadLocal = new ThreadLocal<String>() {
@Override
protected String initialValue() {
return "initial value";
}
};
public static void main(String[] args) throws InterruptedException {
System.out.println(threadLocal.get()); // 输出 initial value
threadLocal.set("new value");
new Thread(() -> {
System.out.println(threadLocal.get()); // 输出 initial value
}).start();
Thread.sleep(1000);
System.out.println(threadLocal.get()); // 输出 new value
threadLocal.remove();
}
}
```
在上面的代码中,我们首先创建了一个ThreadLocal对象,然后重写了initialValue()方法,返回了一个初始值。接着,我们调用了ThreadLocal的get()方法获取当前线程的变量值,并输出了它。然后,我们调用了ThreadLocal的set()方法设置当前线程的变量值为"new value"。接着,我们创建了一个新的线程,并在其中获取了ThreadLocal的变量值,并输出了它。由于每个线程都有自己的ThreadLocal变量,因此在新线程中获取到的变量值仍然是初始值"initial value"。最后,我们再次获取ThreadLocal的变量值,并输出了它,这次输出的是"new value"。最后,我们调用了ThreadLocal的remove()方法,清除了当前线程的变量值。
阅读全文