ThreadLocal的使用代码
时间: 2024-09-04 08:02:14 浏览: 43
`ThreadLocal`是Java中用于提供线程局部变量的类,它可以保证每个线程都有自己的局部变量副本,且这些副本互不干扰。这在多线程环境下非常有用,尤其是在需要保存线程的特定状态时。下面是使用`ThreadLocal`的一个基本示例:
```java
import java.util.concurrent.atomic.AtomicInteger;
public class ThreadLocalExample {
// 创建一个ThreadLocal变量,用来保存线程的序列号
private static final ThreadLocal<Integer> serialNumberGenerator = new ThreadLocal<Integer>() {
private final AtomicInteger atomicInteger = new AtomicInteger(0);
@Override
protected Integer initialValue() {
// 当一个线程首次使用get()方法访问此线程局部变量时,会调用此方法返回初始值。
return atomicInteger.getAndIncrement();
}
};
public int getSerialNumber() {
// 每个线程将有自己的序列号
return serialNumberGenerator.get();
}
public static void main(String[] args) {
ThreadLocalExample example = new ThreadLocalExample();
// 创建线程
Thread thread1 = new Thread(() -> {
// 每个线程将会打印不同的序列号
for (int i = 0; i < 3; i++) {
System.out.println("Thread 1 Serial Number: " + example.getSerialNumber());
}
});
Thread thread2 = new Thread(() -> {
for (int i = 0; i < 3; i++) {
System.out.println("Thread 2 Serial Number: " + example.getSerialNumber());
}
});
// 启动线程
thread1.start();
thread2.start();
}
}
```
这个例子中,`ThreadLocal`被用来为每个线程生成一个独特的序列号。`AtomicInteger`用于确保线程安全地生成序列号。当每个线程调用`getSerialNumber()`方法时,它们都会得到自己独特的序列号。
阅读全文