踩坑(6)Redisson调用unlockAsync方法释放锁失败
问题描述
通过redisson的lockAsync异步方法获取到锁之后,再业务执行完成后调用lock.unlockAsync()无法释放当前锁,导致后续的方法被阻塞
public void asyncLock() {RLock lock = redissonClient.getLock("asyncLock");RFuture<Void> future = lock.lockAsync();future.whenComplete((res, exception) -> {System.out.println(Thread.currentThread().getName() + " 获取到锁 " + new Date());try {Thread.sleep(10000L);} catch (InterruptedException e) {throw new RuntimeException(e);}lock.unlockAsync().whenComplete((v, r) -> {System.out.println(Thread.currentThread().getName() + " 释放了锁 " + new Date());});});System.out.println(Thread.currentThread().getName() + " 其它操作..." + new Date());}
产生原因
释放锁的时候,当前如果没有传入线程id就会使用当前线程的id,由于当前方法是异步方法,和获取锁时的线程是不同的线程所以导致锁释放失败
@Overridepublic RFuture<Void> unlockAsync() {long threadId = Thread.currentThread().getId();return unlockAsync(threadId);}
解决方法
调用unlockAsync() 方法时传入获取锁线程的线程id
public void asyncLock() {RLock lock = redissonClient.getLock("asyncLock");RFuture<Void> future = lock.lockAsync();long threadId = Thread.currentThread().getId();future.whenComplete((res, exception) -> {System.out.println(Thread.currentThread().getName() + " 获取到锁 " + new Date());try {Thread.sleep(10000L);} catch (InterruptedException e) {throw new RuntimeException(e);}lock.unlockAsync(threadId).whenComplete((v, r) -> {System.out.println(Thread.currentThread().getName() + " 释放了锁 " + new Date());});});System.out.println(Thread.currentThread().getName() + " 其它操作..." + new Date());}
相关文章:
踩坑(6)Redisson调用unlockAsync方法释放锁失败
问题描述 通过redisson的lockAsync异步方法获取到锁之后,再业务执行完成后调用lock.unlockAsync()无法释放当前锁,导致后续的方法被阻塞 public void asyncLock() {RLock lock redissonClient.getLock("asyncLock");RFuture<Void> fut…...
树莓派实战应用:基于人脸识别系统
引言: 随着人工智能技术的不断发展,人脸识别技术已经广泛应用于各种场景,如门禁系统、安全监控等。树莓派作为一种功能强大的迷你计算机,也可以用于搭建人脸识别检测系统。 一、项目简介 人脸识别系统是一种基于人工智能技术的身…...
5G赋能智慧文旅:科技与文化的完美结合,打造无缝旅游体验,重塑旅游业的未来
一、5G技术:智慧文旅的强大引擎 5G技术的起源可以追溯到2010年,当时世界各国开始意识到4G技术已经达到了瓶颈,无法满足日益增长的移动通信需求。2013年,国际电信联盟(ITU)成立了5G技术研究组,开…...
大模型:相关参数总结
文章目录 一、相关参数 一、相关参数 参数名称是否必填默认值描述model是调用的模型名称message是传入模型的消息max_tokens否返回tokens的数量temperature否top_p否n否表示一个问答返回几个回答的结果信息stream否false表示应答的方式,false表示返回全部的结果&am…...
腾讯云短信开发
短信服务应用申请 """ 准备工作 1)创建短信应用 - 应用管理 2)申请短信签名 - 国内短信 > 签名管理 3)申请短信模块 - 国内短信 > 正文模板管理 """python中开发腾讯云短信服务 """ 1…...
Dockerfile:如何写一个Dockerfile文件?
如何写一个Dockerfile文件? 🚨推荐参考:Dockerfile:如何写一个Dockerfile文件? 现在的项目肯定都离不开docker,只要是流水线部署就会涉及Dockerfile文件,那么如何写一个正确的编写一个Dockerfil…...
Lua 中的高级特性:模块的使用、字符串模式匹配、高阶函数和表的元方法
### 1. 模块的使用 在 Lua 中,模块是一种封装代码的方式,使得代码可以被重用。下面是一个简单的模块定义和使用的示例: lua -- 定义一个名为 mymodule 的模块 mymodule {} function mymodule.sayHello() print("Hello from my mo…...
openssl3.2/test/certs - 040 - EC cert with named curve signed by named curve ca
文章目录 openssl3.2/test/certs - 040 - EC cert with named curve signed by named curve ca概述笔记END openssl3.2/test/certs - 040 - EC cert with named curve signed by named curve ca 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev…...
LabVIEW准分子激光器控制系统
LabVIEW准分子激光器控制系统是为了实现准分子激光光源在工业、医疗和科研领域的应用集成及其功能的扩展。系统由PC端和激光器端两部分构成,通过光隔离的RS232通讯连接,以实现稳定可靠的控制与通信。 系统主要由微控制单元(MCU)主…...
热血江湖服务端服务器架设教程
热血江湖服务端服务器架设教程 大家好,我是艾西今天简单的说下热血江湖架设需要哪些东西然后怎么操作,不管你是自己玩还是对外开放,这对于有兴趣的小伙伴总的都是一件好事。技多不压身就是这么个道理,当你需要用上时还希望能记起…...
美易平台:美元指数微幅回落
在最新的金融市场动态中,美元指数经历了0.5%的下跌,报告显示当前指数为103.03。这一变化对全球经济和货币市场产生了一定的影响。在这样的市场环境下,互联网金融券商如美易makeasy平台如何应对变化,并保持其服务质量和客户资产安全…...
编译和链接---C语言
引言 众所周知,C语言是一门高级的编程语言,是无法被计算机直接读懂的,C语言也不同于汇编PHP,无法直接翻译成机器语言,在学习的过程中,你是否好奇过我们所敲的C语言代码,是如何一步步翻译成机器…...
SAP EXCEL上传行数限制问题(ALSM_EXCEL_TO_INTERNAL_TABLE)
标准函数ALSM_EXCEL_TO_INTERNAL_TABLE上传EXCEL函数限制上限是9999行,如果上传数据记录数超过9999行的情况,需要拷贝标准的函数封装一个自定义的函数进行处理 标准的函数ROW的长度为4位,如下图所示 因此,如果想行数的位数超过4位…...
3.召回率-机器学习模型性能的常用的评估指标
在机器学习领域,召回率是一个关键的性能指标,用于评估模型在正样本中正确识别的能力。召回率的计算涉及到模型成功检测到的正样本数量与实际正样本的总数量之比。这个指标对于很多应用场景都至关重要,尤其是在那些要求较高的领域,…...
linux安装docker--更具官网教程
1.访问https://docs.docker.com/ 2.进入download 3输入cento 或者直接访问地址Install Docker Engine on CentOS | Docker Docs 4一步一步根据官网命令走 2安装 3 4 方式一: service docker start(开启) service docker status(…...
云原生安全:风险挑战与安全架构设计策略
概述 数字化转型已经成为当今最流行的话题之一,大部分企业已经开启自身的数字化转型之旅,在未来企业只有数字化企业和非数字化企业之分。通过数字经济的加速发展,可以有效推动企业数字化转型的步伐。云计算作为数字化转型的底座和重要的载体…...
c语言-文件的读写操作
文章目录 前言一、文件基础1.1 文件的分类1.2 文件路径和文件名 二、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭 总结 前言 本篇文章介绍c语言的文件读写操作。 一、文件基础 1.1 文件的分类 在c语言中,从文件的功能角度来看,文件可分为以下两…...
Python处理日期和时间库之arrow使用详解
概要 日期和时间处理是许多应用程序中的常见任务,但在 Python 中,标准库中的 datetime 模块有时可能会让这些任务变得复杂和繁琐。幸运的是,有一个名为 Arrow 的第三方库,它提供了简化日期和时间处理的功能,使其更加直…...
架构师之路(十四)计算机网络(网络层)
前置知识(了解):计算机基础。 作为架构师,我们所设计的系统很少为单机系统,因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 网络层提供主机…...
Spring Boot开发Spring Security
这里我对springboot不做过多描述,因为我觉得学这个的肯定掌握了springboot这些基础 导入核心依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐security</artifactId> </depen…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
