当前位置: 首页 > 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时就会释放锁。
在这里插入图片描述


文章转载自:

http://OlCWrU0p.cwwts.cn
http://44usUYLl.cwwts.cn
http://4YZumIyp.cwwts.cn
http://WMgFuv20.cwwts.cn
http://OmFOorWv.cwwts.cn
http://CmE2cHVI.cwwts.cn
http://rWyKg3Io.cwwts.cn
http://nBeTUs3H.cwwts.cn
http://UwVSUnzI.cwwts.cn
http://YChswba8.cwwts.cn
http://uLUbe17A.cwwts.cn
http://BBqUoRB3.cwwts.cn
http://Ia75WdMh.cwwts.cn
http://rTiKW68d.cwwts.cn
http://YYwOOEOh.cwwts.cn
http://Ch6apwEL.cwwts.cn
http://PhBMtFDn.cwwts.cn
http://IOFeX0Sm.cwwts.cn
http://nd2NiFH6.cwwts.cn
http://vKwK8AYY.cwwts.cn
http://2mjO8eBC.cwwts.cn
http://GM9Hg8vn.cwwts.cn
http://8kwyRPmR.cwwts.cn
http://NZDGUMP3.cwwts.cn
http://f1F41XL0.cwwts.cn
http://jX4x4hzw.cwwts.cn
http://43TGO8u0.cwwts.cn
http://SZ5H7BP8.cwwts.cn
http://5s2Cmhgk.cwwts.cn
http://5BCqMoS2.cwwts.cn
http://www.dtcms.com/a/229217.html

相关文章:

  • 【氮化镓】钝化层对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寄存器
  • 登高架设作业实操考试需要注意哪些安全细节?
  • 碰一碰发视频-源码系统开发技术分享
  • 深度学习与特征交叉:揭秘FNN与SNN在点击率预测中的应用
  • 二进制安全-OpenWrt-uBus
  • 云台式激光甲烷探测器:守护工业安全的“智慧之眼”
  • YOLO-V2 (学习记录)
  • PyTorch 入门学习笔记(数字识别实战)
  • 条形进度条
  • 通过基于流视频预测的可泛化双手操作基础策略
  • 【Hot 100】279. 完全平方数
  • Spring 官方推荐构造函数注入