ThreadLocal有啥坑

北慕城南 提交于 2019-12-02 19:11:57
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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!