ThreadLocal的简单使用

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

9 − 2 =