public static ThreadLocal<String> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
threadLocal.set("main");
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.printf("threadlocal1 value:%s\n", threadLocal.get());
threadLocal.set("thread1");
System.out.printf("threadlocal1 value:%s\n", threadLocal.get());
}
});
t1.setName("thread1");
t1.start();
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.printf("threadlocal2 value:%s\n", threadLocal.get());
threadLocal.set("thread2");
System.out.printf("threadlocal2 value:%s\n", threadLocal.get());
}
});
t2.setName("thread2");
t2.start();
System.out.printf("main value:%s\n", threadLocal.get());
}
结果:
threadlocal1 value:null
threadlocal1 value:thread1
main value:main
threadlocal2 value:null
threadlocal2 value:thread2
提炼:threadlocal跟线程有关,是不跨线程的,注意hystrix和线程池的相关问题
用hystrix注解的时候注意:hystrix如果清空threadlocal,清的是主线程的threadlocal,而不是当前线程的threadlocal