java使用(ThreadLocal、ReentrantLock(JVM锁)、Redisson分布式锁)解决全局共享变量并发安全问题

本文介绍了如何使用Java的ThreadLocal、ReentrantLock以及Redisson分布式锁解决全局共享变量的并发安全问题。通过示例展示了并发问题的产生及解决方法,强调了使用后的清理和释放操作的重要性。
摘要由CSDN通过智能技术生成

场景:
1、在java业务类中当我们定义一个全局变量,这个全局变量会被不同方法使用,并且不同线程对该变量更改、读取其值,存在并发问题
2、因为有可能本次线程赋值后还没处理完业务,后续的线程已经把变量值改掉,那么这时候本次线程拿到的就是其他线程赋的值,这个时候会出现并发问题,导致变量值混乱
3、此问题可以使用自定义局部变量中转处理解决,也可以使用 ThreadLocal、JVM锁(ReentrantLock)、分布式锁(Redisson) 来解决

分析:
1、因为在java中,Spring加载并生产JavaBean给到容器管理的实例默认都是单例模式,所以全局变量只会在生成Bean的时候初始化一次,后续业务线程每次请求全局变量都不会再初始化
2、而方法内部的局部变量正好是符合每次请求线程进来,局部变量都会再次初始化成一个新的变量并重新赋值,所以用局部变量也可以解决此并发问题
3、那么在什么地方使用ThreadLocal呢? 什么变量是请求公用的就将该变量托付给ThreadLocal来管理其线程副本。(当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本&#x

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值