编写一个示例程序,展示如何使用 ThreadLocal 类
ThreadLocal
类是 Java 中的一个类,它提供了线程局部变量。这些变量与普通的可共享变量不同,因为每一个访问这个变量的线程都有它自己的独立初始化的变量副本。下面是一个简单的 Java 示例,说明如何使用 ThreadLocal
类:
public class ThreadLocalExample {
// 创建一个ThreadLocal实例
private static final ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
// 启动两个线程,模拟两个用户同时访问ThreadLocal变量
Runnable task1 = () -> {
threadLocal.set(100); // 为当前线程设置ThreadLocal变量值
try {
Thread.sleep(2000); // 模拟线程执行一些操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + threadLocal.get()); // 输出当前线程的ThreadLocal变量值
};
Runnable task2 = () -> {
threadLocal.set(200); // 为当前线程设置ThreadLocal变量值
try {
Thread.sleep(1000); // 模拟线程执行一些操作
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + threadLocal.get()); // 输出当前线程的ThreadLocal变量值
};
new Thread(task1, "Thread-1").start();
new Thread(task2, "Thread-2").start();
}
}
在这个示例中,我们创建了一个 ThreadLocal
实例来存储整数。我们启动了两个线程,每个线程都将其自己的值存储在这个 ThreadLocal
实例中。由于 ThreadLocal
为每个线程提供了独立的变量副本,因此,尽管两个线程都使用相同的 ThreadLocal
实例,但它们不会相互干扰。每个线程都可以获取和设置它自己的值,而不会影响到其他线程的值。