当前位置: 首页 > news >正文

SpringCloud 分布式锁Redisson锁的重入性 高并发 获取锁

介绍

Redisson 的锁支持 可重入性,这意味着同一个线程在获取锁后,如果再次尝试获取该锁,它可以成功地获得锁,而不会被阻塞。

  • 每次一个线程成功获取锁后,它的持有次数会增加。当线程再次获取该锁时,Redisson 会检查该线程是否已经持有锁。如果是,它会允许该线程再次获取锁,并将持有次数递增。
  • 每次释放锁时,持有次数会递减,直到持有次数变为零,锁才会被完全释放。

在这里插入图片描述

  public static void main(String[] args) {// 创建 Redisson 客户端配置Config config = new Config();config.useSingleServer().setAddress("redis://localhost:6379"); // 连接到本地 Redis 服务器RedissonClient redisson = Redisson.create(config);// 获取分布式锁RLock lock = redisson.getLock("accountLock");try {// 模拟账户操作的过程:先获取锁,进行第一次操作lock.lock();  //+1System.out.println("Lock acquired for the first time!");// 业务逻辑:扣款deductBalance(lock);} finally {// 释放锁:必须要释放与 lock.lock() 相同次数的 unlock() 才能完全释放锁lock.unlock();  //-1System.out.println("Lock released after first operation.");}}// 模拟业务逻辑:扣款操作private static void deductBalance(RLock lock) {// 业务逻辑需要在同一个线程中再次获取锁(模拟可重入性)lock.lock();//+1try {System.out.println("Lock acquired for the second time, performing deduct balance operation...");// 扣款逻辑,比如账户余额减少System.out.println("Balance deducted!");} finally {// 释放锁lock.unlock();//-1System.out.println("Lock released after deduct balance operation.");}}

当value值为0时就会释放锁。
在这里插入图片描述

相关文章:

  • 【氮化镓】钝化层对p-GaN HEMT阈值电压的影响
  • Qt 事件传递的完整流程
  • 板凳-------Mysql cookbook学习 (九--3)
  • AXURE-动态面板
  • 软考 系统架构设计师系列知识点之杂项集萃(79)
  • h5的aliplayer-min.js 加密视频会走到debugger
  • 晶台光耦在手机PD快充上的应用
  • [游戏设计原理_1] 对称性和同步性 | 合作与对抗 | 公平 | 反馈循环
  • 电工基础【4】点动接线实操
  • 火语言RPA--建立界面应用
  • STM32外部中断(EXTI)以及旋转编码器的简介
  • 第三十三天打卡复习
  • Java 中 i++ 与 ++i 的区别及常见误区解析
  • 《Effective Python》第六章 推导式和生成器——使用类替代生成器的 `throw` 方法管理迭代状态转换
  • 行列式详解:从定义到应用
  • C++的多态特性及private
  • Go的隐式接口机制
  • Vue中安装插件的方式
  • 技巧小结:外部总线访问FPGA寄存器
  • 登高架设作业实操考试需要注意哪些安全细节?
  • wordpress内容分页/seo值怎么提高
  • 河北邯郸信息港/青岛seo网站排名
  • 二维码网站建设源码/seo管理
  • 天元建设集团有限公司第八建筑工程公司/5g网络优化
  • 用易语言做网站抢购软件/seo竞争对手分析
  • 广州做网站的公司/台州seo