Java 并发编程:线程变量 ThreadLocal
warning:
这篇文章距离上次修改已过184天,其中的内容可能已经有所变动。
public class ThreadLocalExample {
// 创建一个ThreadLocal变量保存整数
private static final ThreadLocal<Integer> LOCAL_VARIABLE = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0; // 初始值为0
}
};
// 获取当前线程的局部变量值并递增
public static void increment() {
LOCAL_VARIABLE.set(LOCAL_VARIABLE.get() + 1);
}
// 获取当前线程的局部变量值
public static int get() {
return LOCAL_VARIABLE.get();
}
// 清除当前线程的局部变量值
public static void clear() {
LOCAL_VARIABLE.remove();
}
public static void main(String[] args) {
// 创建并启动两个线程
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
// 在线程1中递增三次
for (int i = 0; i < 3; i++) {
increment();
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
// 在线程2中递增五次
for (int i = 0; i < 5; i++) {
increment();
}
}
});
thread1.start();
thread2.start();
// 等待两个线程执行完毕
while (thread1.isAlive() || thread2.isAlive()) {
Thread.yield();
}
// 打印局部变量的最终值
System.out.println("Local Variable Value: " + get());
// 清除局部变量的值
clear();
}
}
这段代码创建了一个ThreadLocal变量,用于在每个线程中保存一个整数计数器。两个线程分别递增三次和五次,最后主线程打印出局部变量的值,并清除它。这个例子展示了ThreadLocal如何用于线程安全地存储和访问每个线程独有的数据。
评论已关闭