1、ThreadLocal简介
- ThreadLocal是一个全局对象,ThreadLocal是线程范围内变量共享的解决方案;ThreadLocal可以看作是一个map集合,key就是当前线程,value就是要存放的变量。eg如下:
ThreadLocal threadLocal = new ThreadLocal();
int n = new Random().nextInt();
threadLocal.set(data);
threadLocal.get();
- ThreadLocal的引用变量用完后会自动给你销毁,而不用考虑ThreadLocal中的变量会占用空间。
- 在ThreadLocal类中有一个Map,用于存储每一个线程的变量副本,Map中元素的key为线程对象,value为对应的线程的变量副本。
- ThreadLocal的作用:
- ThreadLocal通过为每一个线程提供一个独立的变量副本解决了变量并发访问的冲突问题。
- 传递数据:可以通过ThreadLocal在同一线程的不同组件中传递公共变量。
- 线程隔离:每个线程的变量都是独立的,不会相互影响。
2、入门案例
public class ThreadLocalTest {
private static final AtomicInteger nextId = new AtomicInteger(0);
private static final ThreadLocal<Integer> threadId = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return nextId.getAndIncrement();
}
};
public static int get() {
return threadId.get();
}
static class RunnableTask implements Runnable {
@Override
public void run() {
try {
System.out.println(
"当前线程名称为:" + Thread.