public class ThreadLocalTest {
public static void main(String[] args) {
final ThreadLocal<Integer> local = new ThreadLocal<>();
local.set(10);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " local: " + local.get());
}
});
t.start();
System.out.println("Main local: " + local.get());
}
}
输出结果:
Thread-0 local: null
Main local: 10
原因是在主线程中set了值,在子线程中没有set。threadLocal保存的是每个线程的值。
解析:
threadLocal类的set方法:
key为当前t