1、ThreadLocal工具类
import java.util.Random;
public class ThreadLocalUtils {
public static final ThreadLocal
2、业务线程类
import lombok.SneakyThrows;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class Task implements Runnable {
private String name;
Task(String name) {
this.name = name;
}
@SneakyThrows
@Override
public void run() {
for (int i = 1; i <= 4; i++) {
// ThreadLocal.get方法获取本地线程变量
if (null == ThreadLocalUtils.threadLocal.get()) {
Random random = new Random();
ThreadLocalUtils.threadLocal.set(random.nextInt(100));
int num = (Integer) ThreadLocalUtils.threadLocal.get();
System.out.println("线程:【" + name + "】当前值: " + num);
TimeUnit.MILLISECONDS.sleep(1000);
continue;
}
int num = (Integer) ThreadLocalUtils.threadLocal.get();
num += 1;
ThreadLocalUtils.threadLocal.set(num);
System.out.println("线程:【" + name + "】当前值: " + num);
if (i == 3) {
ThreadLocalUtils.threadLocal.remove();
}
Thread.sleep(1000);
}
}
}
3、测试
public class ThreadLocalTest {
public static void main(String[] args) {
new Thread(new Task("task-1")).start();
new Thread(new Task("task-2")).start();
}
}
4、结果
调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法 调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法 线程:【task-1】当前值: 75 线程:【task-2】当前值: 24 线程:【task-2】当前值: 25 线程:【task-1】当前值: 76 线程:【task-2】当前值: 26 线程:【task-1】当前值: 77 调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法 调用get()方法,当前线程共享变量未设置,自动调用initialValue()方法 线程:【task-1】当前值: 29 线程:【task-2】当前值: 12



