ThreadLocal
众所周知ThreadLocal是在线程内部的变量,可有的时候在代码中依然会混淆它的值,比如以下代码:
public class Test {
static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();
static class MyTest implements Runnable {
MyTest() {
threadLocal.set(2);
System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get());
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get());
}
}
public static void main(String[] args) {
new Thread(new MyTest()).start();
}
}
答案是:
可以看到,MyTest的构造函数是属于main线程执行的,run方法的输出是Thread-0执行的,两个线程中保存的是两个不同的ThreadLocal值。
在分析ThreadLocal的值的时候要分析线程的起点。
今天博主很懒,就写这么多