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

踩坑(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异步方法获取到锁之后&#xff0c;再业务执行完成后调用lock.unlockAsync()无法释放当前锁&#xff0c;导致后续的方法被阻塞 public void asyncLock() {RLock lock redissonClient.getLock("asyncLock");RFuture<Void> fut…...

树莓派实战应用:基于人脸识别系统

引言&#xff1a; 随着人工智能技术的不断发展&#xff0c;人脸识别技术已经广泛应用于各种场景&#xff0c;如门禁系统、安全监控等。树莓派作为一种功能强大的迷你计算机&#xff0c;也可以用于搭建人脸识别检测系统。 一、项目简介 人脸识别系统是一种基于人工智能技术的身…...

5G赋能智慧文旅:科技与文化的完美结合,打造无缝旅游体验,重塑旅游业的未来

一、5G技术&#xff1a;智慧文旅的强大引擎 5G技术的起源可以追溯到2010年&#xff0c;当时世界各国开始意识到4G技术已经达到了瓶颈&#xff0c;无法满足日益增长的移动通信需求。2013年&#xff0c;国际电信联盟&#xff08;ITU&#xff09;成立了5G技术研究组&#xff0c;开…...

大模型:相关参数总结

文章目录 一、相关参数 一、相关参数 参数名称是否必填默认值描述model是调用的模型名称message是传入模型的消息max_tokens否返回tokens的数量temperature否top_p否n否表示一个问答返回几个回答的结果信息stream否false表示应答的方式&#xff0c;false表示返回全部的结果&am…...

腾讯云短信开发

短信服务应用申请 """ 准备工作 1&#xff09;创建短信应用 - 应用管理 2&#xff09;申请短信签名 - 国内短信 > 签名管理 3&#xff09;申请短信模块 - 国内短信 > 正文模板管理 """python中开发腾讯云短信服务 """ 1…...

Dockerfile:如何写一个Dockerfile文件?

如何写一个Dockerfile文件&#xff1f; &#x1f6a8;推荐参考&#xff1a;Dockerfile&#xff1a;如何写一个Dockerfile文件&#xff1f; 现在的项目肯定都离不开docker&#xff0c;只要是流水线部署就会涉及Dockerfile文件&#xff0c;那么如何写一个正确的编写一个Dockerfil…...

Lua 中的高级特性:模块的使用、字符串模式匹配、高阶函数和表的元方法

### 1. 模块的使用 在 Lua 中&#xff0c;模块是一种封装代码的方式&#xff0c;使得代码可以被重用。下面是一个简单的模块定义和使用的示例&#xff1a; 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端和激光器端两部分构成&#xff0c;通过光隔离的RS232通讯连接&#xff0c;以实现稳定可靠的控制与通信。 系统主要由微控制单元&#xff08;MCU&#xff09;主…...

热血江湖服务端服务器架设教程

热血江湖服务端服务器架设教程 大家好&#xff0c;我是艾西今天简单的说下热血江湖架设需要哪些东西然后怎么操作&#xff0c;不管你是自己玩还是对外开放&#xff0c;这对于有兴趣的小伙伴总的都是一件好事。技多不压身就是这么个道理&#xff0c;当你需要用上时还希望能记起…...

美易平台:美元指数微幅回落

在最新的金融市场动态中&#xff0c;美元指数经历了0.5%的下跌&#xff0c;报告显示当前指数为103.03。这一变化对全球经济和货币市场产生了一定的影响。在这样的市场环境下&#xff0c;互联网金融券商如美易makeasy平台如何应对变化&#xff0c;并保持其服务质量和客户资产安全…...

编译和链接---C语言

引言 众所周知&#xff0c;C语言是一门高级的编程语言&#xff0c;是无法被计算机直接读懂的&#xff0c;C语言也不同于汇编PHP&#xff0c;无法直接翻译成机器语言&#xff0c;在学习的过程中&#xff0c;你是否好奇过我们所敲的C语言代码&#xff0c;是如何一步步翻译成机器…...

SAP EXCEL上传行数限制问题(ALSM_EXCEL_TO_INTERNAL_TABLE)

标准函数ALSM_EXCEL_TO_INTERNAL_TABLE上传EXCEL函数限制上限是9999行&#xff0c;如果上传数据记录数超过9999行的情况&#xff0c;需要拷贝标准的函数封装一个自定义的函数进行处理 标准的函数ROW的长度为4位&#xff0c;如下图所示 因此&#xff0c;如果想行数的位数超过4位…...

3.召回率-机器学习模型性能的常用的评估指标

在机器学习领域&#xff0c;召回率是一个关键的性能指标&#xff0c;用于评估模型在正样本中正确识别的能力。召回率的计算涉及到模型成功检测到的正样本数量与实际正样本的总数量之比。这个指标对于很多应用场景都至关重要&#xff0c;尤其是在那些要求较高的领域&#xff0c;…...

linux安装docker--更具官网教程

1.访问https://docs.docker.com/ 2.进入download 3输入cento 或者直接访问地址Install Docker Engine on CentOS | Docker Docs 4一步一步根据官网命令走 2安装 3 4 方式一&#xff1a; service docker start&#xff08;开启&#xff09; service docker status&#xff08…...

云原生安全:风险挑战与安全架构设计策略

概述 数字化转型已经成为当今最流行的话题之一&#xff0c;大部分企业已经开启自身的数字化转型之旅&#xff0c;在未来企业只有数字化企业和非数字化企业之分。通过数字经济的加速发展&#xff0c;可以有效推动企业数字化转型的步伐。云计算作为数字化转型的底座和重要的载体…...

c语言-文件的读写操作

文章目录 前言一、文件基础1.1 文件的分类1.2 文件路径和文件名 二、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭 总结 前言 本篇文章介绍c语言的文件读写操作。 一、文件基础 1.1 文件的分类 在c语言中&#xff0c;从文件的功能角度来看&#xff0c;文件可分为以下两…...

Python处理日期和时间库之arrow使用详解

概要 日期和时间处理是许多应用程序中的常见任务&#xff0c;但在 Python 中&#xff0c;标准库中的 datetime 模块有时可能会让这些任务变得复杂和繁琐。幸运的是&#xff0c;有一个名为 Arrow 的第三方库&#xff0c;它提供了简化日期和时间处理的功能&#xff0c;使其更加直…...

架构师之路(十四)计算机网络(网络层)

前置知识&#xff08;了解&#xff09;&#xff1a;计算机基础。 作为架构师&#xff0c;我们所设计的系统很少为单机系统&#xff0c;因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 网络层提供主机…...

Spring Boot开发Spring Security

这里我对springboot不做过多描述&#xff0c;因为我觉得学这个的肯定掌握了springboot这些基础 导入核心依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐security</artifactId> </depen…...

TradingAgents-CN:多智能体LLM金融分析框架的技术架构与深度应用指南

TradingAgents-CN&#xff1a;多智能体LLM金融分析框架的技术架构与深度应用指南 【免费下载链接】TradingAgents-CN 基于多智能体LLM的中文金融交易框架 - TradingAgents中文增强版 项目地址: https://gitcode.com/GitHub_Trending/tr/TradingAgents-CN 第一部分&#…...

5分钟搞定!OpenClaw钉钉机器人企业级部署终极指南

5分钟搞定&#xff01;OpenClaw钉钉机器人企业级部署终极指南 【免费下载链接】openclaw-channel-dingtalk A dingtalk bot channel plugin for clawdbot 项目地址: https://gitcode.com/gh_mirrors/op/openclaw-channel-dingtalk 想让你的团队在钉钉里拥有一个聪明的AI…...

OpenClaw+nanobot日程管理:自然语言输入转日历事件

OpenClawnanobot日程管理&#xff1a;自然语言输入转日历事件 1. 为什么需要自然语言日程管理 作为一个经常被各种会议和截止日期追着跑的技术从业者&#xff0c;我一直在寻找更高效的日程管理方式。传统的日历应用需要手动填写时间、地点、标题等字段&#xff0c;操作繁琐且…...

Flutter开发踩坑记:CocoaPods安装失败全流程解决方案(含Ruby版本升级)

Flutter开发实战&#xff1a;CocoaPods安装失败的系统级解决方案 当你满怀期待地运行flutter doctor准备大展身手时&#xff0c;屏幕上突然跳出"CocoaPods not installed"的红色警告&#xff0c;这种挫败感每个Flutter开发者都深有体会。不同于简单的"安装-运行…...

高数 | 【极限运算陷阱】破解未定式与直接代入的边界条件

1. 极限运算中的未定式&#xff1a;为什么不能直接代入&#xff1f; 第一次接触极限运算时&#xff0c;很多同学都会犯一个典型错误——看到x趋近于某个值&#xff0c;就直接把这个值代入函数计算。我当年学高数时也踩过这个坑&#xff0c;直到作业本上连续出现三个大红叉才意识…...

Eino:Agent的LLM抽象

拨开迷雾看本质&#xff1a;从零推导 ChatModelAgent&#xff08;模型适配层与 Agent 运行时&#xff09; 在 react.md 里看到的是 “ReAct 作为范式” 的推导&#xff1b;而本篇把视角切到 chatmodel.go 作为工程实现&#xff1a;它不只是“为了 ReAct 画图”&#xff0c;更是…...

Go HTTP Server 性能分析与优化

Go HTTP Server 性能分析与优化 在当今高并发的互联网应用中&#xff0c;HTTP Server的性能直接决定了用户体验和系统稳定性。Go语言凭借其轻量级协程和高效的网络库&#xff0c;成为构建高性能HTTP服务的首选之一。即使使用Go&#xff0c;开发者仍需深入分析性能瓶颈并进行针…...

4个突破性功能步骤:全面兼容让Switch手柄实现跨平台操控自由

4个突破性功能步骤&#xff1a;全面兼容让Switch手柄实现跨平台操控自由 【免费下载链接】BetterJoy Allows the Nintendo Switch Pro Controller, Joycons and SNES controller to be used with CEMU, Citra, Dolphin, Yuzu and as generic XInput 项目地址: https://gitcod…...

MATLAB伪彩色增强实战:从灰度分层到频域处理的完整指南

1. 伪彩色增强技术入门指南 第一次接触伪彩色增强是在研究生课题中&#xff0c;当时需要分析一批医学X光片。盯着那些灰蒙蒙的片子看了三天后&#xff0c;我突然意识到&#xff1a;人眼对色彩差异的敏感度&#xff0c;确实远超对灰度变化的感知。这就是伪彩色技术的核心价值——…...

零基础玩转RetinaFace:一键部署人脸检测,合影/监控都能精准识别

零基础玩转RetinaFace&#xff1a;一键部署人脸检测&#xff0c;合影/监控都能精准识别 1. 为什么选择RetinaFace人脸检测 在当今数字时代&#xff0c;人脸检测技术已经成为众多应用的基础功能。无论是社交媒体上的自动标记、安防监控系统的人脸识别&#xff0c;还是手机相册…...