关于ThreadLocal的基本使用讲解

ThreadLocal

多线程访问同一个共享变量的时候容易出现并发问题,为了保证没有并发问题,我们可以让每个线程使用自己的独有的变量,我们可以使用 一个map 集合,来保证每个线程使用当前线程独有的数据

在tomcat 编程中为了更方便的传递数据,我们希望把数据放到一个工具类全局变量中,让后使用的时候,从工具类的全局变量中获取,这样我们就会少很多参数的传递,进而提升开发效率但是

多线程访问同一个共享变量的时候容易出现并发问题,为了保证没有并发问题,我们可以让每个线程使用自己的独有的变量, (笨方法)我们可以使用 一个map 集合,来保证每个线程使用当前线程独有的数据:如下

1. 自定义Map集合方式

   public class ThreadUtil {
    
        private static final Map map = new HashMap();
        // 获取数据
        public static Object  get(String  name){
            return map.get(name);
        }
    
        //读取数据
        public static void  set(String key,Object  obj){
             map.put(key,obj);
        }
    
    }
  //数据存放
    @RestController
    public class HelloController {
        @RequestMapping("/hello")
        public String hello(){
            ThreadUtil.set(Thread.currentThread().getName(),"hahah");
            System.out.println("访问1....");
            return "hello 8080";
        }
    }
    // 数据获取
    @Service
    public class HelloService {
        public void test(){
            System.out.println(ThreadUtil.get(Thread.currentThread().getName()));
            System.out.println();
        }
    
    }

使用起来相对不是很方便, 其实 jdk 已经自带了一个 比较方便的,和线程绑定的 对象 ThreadLocal

2. ThreadLocal

   public class ThreadUtil {
    
        private static final ThreadLocal thead = new ThreadLocal();
        // 获取数据
        public static Object  get(){
            return thead.get();
        }
    
        //读取数据
        public static void  set(Object  obj){
            thead.set(obj);
        }
    
    }
//数据存放
@RestController
public class HelloController {
    @RequestMapping("/hello")
    public String hello(){
        ThreadUtil.set("hahah");
        System.out.println("访问1....");
        return "hello 8080";
    }
}

// 数据获取
@Service
public class HelloService {
    public void test(){
        System.out.println(ThreadUtil.get());
        System.out.println();
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大梦谁先觉i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值