ThreadLocal原理代码示例
时间: 2024-02-02 07:10:58 浏览: 81
ThreadLocal是Java中的一个线程局部变量,它提供了一种线程安全的方式来存储每个线程的独立副本。每个线程都可以独立地访问和修改自己的副本,而不会影响其他线程的副本。
ThreadLocal的原理是通过一个ThreadLocalMap来存储每个线程的变量副本。在ThreadLocalMap中,以ThreadLocal对象作为key,以线程的变量副本作为value。当使用ThreadLocal的get()方法获取变量值时,会先获取当前线程,然后从ThreadLocalMap中根据当前ThreadLocal对象获取对应的变量副本。当使用ThreadLocal的set()方法设置变量值时,会先获取当前线程,然后将变量值存储到ThreadLocalMap中对应的位置。
下面是一个简单的示例代码,演示了如何使用ThreadLocal来实现线程局部变量:
```java
public class ThreadLocalExample {
private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
// 创建并启动两个线程
Thread thread1 = new Thread(() -> {
threadLocal.set(1);
System.out.println("Thread 1: " + threadLocal.get());
threadLocal.remove();
});
Thread thread2 = new Thread(() -> {
threadLocal.set(2);
System.out.println("Thread 2: " + threadLocal.get());
threadLocal.remove();
});
thread1.start();
thread2.start();
}
}
```
在上面的代码中,我们创建了一个ThreadLocal对象`threadLocal`,并在两个线程中分别设置和获取变量值。每个线程都有自己独立的变量副本,互不干扰。
阅读全文