1.ThreadLocal是什么?
线程局部变量,有效作用域仅线程执行过程,在一定程度上可保证值在多线程环境中的安全性;
每个Thread对象内部都维护了一个ThreadLocalMap这样一个ThreadLocal的Map,可以存放若干个ThreadLocal。每次获取或者设置都是对该ThreadLocal进行的操作,是与其他线程分开的。
2.示例代码
//工具类
class BizUtil{
public static final ThreadLocal<String> userName=new ThreadLocal<>();
public static String getUserName(){
return userName.get();
}
public static void setUserName(String value){
userName.set(value);
}
}
//模拟业务调用
class TestService{
public void execute(){
System.out.println("userName:"+BizUtil.getUserName());
}
}
//main方法
public class Application{
public static void mian(String[] args){
TestService service=new TestService();
new Thread(() ->{
BizUtil.setUserName("123");
service.execute();
}).start();
new Thread(() ->{
//BizUtil.setUserName("123");
service.execute();
}).start();
}
}
//打印输出结果:
//userName:123
//userName:null