浅聊一下,可中断锁(ReentrantLock)
前言
今天早上上厕所,上的我痔疮犯了,屁股一坐下去就感觉一根针在刺我,得的是外痔,之前还坚持用痔疮膏来着,但是感觉涂药的那个姿势以及位置我实在无法忍受,就把它给断了,到头来还是屁股糟了罪,
什么是可中断锁?
再说起 ReentrantLock 的时候可能很多人第一时间想到的是公平、非公平锁,但是 ReentrantLock 丰富的 api 可不止于此哦,可中断锁顾名思义,就是在竞争锁等待的时间太久,我们开发人员可以调用 interrupt(英特入谱特)方法让 lockInterruptibly (加锁可中断)方法抛出异常,让线程主动退出等待的过程,去做别的事情。
可中断锁应用
threadOne 进行 lockInterruptibly 加锁操作,由于锁一直被 threadOne 占用,当 threadTwo 开始进行 lockInterruptibly 加锁的时候,由于锁还在 threadOne 这,threadOne 会一直处于一个等待的状态,如果 threadOne 一直没有调用 unlock 方法,那么 threadTwo 会一直休眠,直至等到 unlock、或者 threadOne.interrupt() 方法才会再次被唤醒进行工作,而 ReentrantLock 显然也是考虑到了这一点,在 lockInterruptibly 方法里面,如果线程被唤醒后,会对线程的中断状态进行一个判断,如果线程被中断了,则会抛出一个异常,这样一来,就避免了 threadTwo 一直等待的现象出现了。

lockInterruptibly 源码剖析
点进入口中可以看到,是利用了 sync 里面的一个类实现的

而 sync 继承了 AQS (AbstractQueuedSynchronizer),哦吼又是借助 AQS 实现的。接下来我们只需分析 AQS 中的 acquireInterruptibly 方法就好了。

可以看到,如果是一个中断状态的线程去使用 lockInterruptibly 方法会直接抛出异常的,开发的时候要注意!里面的 tryAcquire 方法在我们分析公平、非公平锁的时候就已经分析过了,不做剖析。可以点击 ReentrantLock源码探究、探究公平锁与非公平锁背后的奥秘 进行阅读。那么就只剩下 doAcquireInterruptibly 了。

doAcquireInterruptibly 源码剖析
这段代码其实也在 ReentrantLock源码探究、探究公平锁与非公平锁背后的奥秘 这篇文章里面分析过了。和 AQS 中的 acquireQueued 这个方法逻辑一样,唯一有区别的地方就是,线程被唤醒后 doAcquireInterruptibly 会直接抛出一个异常,而 acquireQueued 则不会。

下面我贴一张我自己的截图,方便日后阅读~~~~~,到此 ReentrantLock 是可中断锁的秘密已经解开了。

线程中的 interrupt、park、interrupted、isInterrupted 是什么?
一个简单的小例子直观感受一下,threadOne 里面调用 parkAndCheckInterrupt 方法进行休眠(阻塞)线程的操作,然后等待被唤醒,过了 10 秒钟后 threadOne 自己调用了 interrupt 方法,将 park 休眠状态下的自己给唤醒了。值得一提的是 interrupted 方法被调用后,线程的中断状态会立即反转一次,之后看自己的中断状态即为反转后的状态。而且唤醒 threadOne 的方式不止一种,还可以使用 LockSupport.unpark(threadOne);

运行结果

相关文章:
浅聊一下,可中断锁(ReentrantLock)
前言 今天早上上厕所,上的我痔疮犯了,屁股一坐下去就感觉一根针在刺我,得的是外痔,之前还坚持用痔疮膏来着,但是感觉涂药的那个姿势以及位置我实在无法忍受,就把它给断了,到头来还是屁股糟了罪&…...
关于Arcgis林业数据处理的62个常用技巧
一、计算面积 ( 可以帮我们计算小班面积 ) 添加 AREA 字段,然后右键点击字段列,然后点击 CALCULATE VALUES; ---> 选择 ADVANCED --》把下面的代码输入,然后在最下面 处写 OUTPUT 点击 OK 就 OK 了。 Dim Outp…...
一些NLP术语
一些NLP术语pre-training(预训练)fine-tuning(微调)下游任务Few-shot Learning(少样本学习)Prompt?(自然语言提示信息)二级标题三级标题pre-training(预训练&…...
Session详解,学习 Session对象一篇文章就够了
目录 1 Session概述 2 Session原理 3 Session使用 3.1 获取Session 3.2 Session保存数据 3.3 Session获取数据 3.4 Session移除数据 4 Session与Request应用区别 4.1 Session和request存储数据 4.2 获取session和request中的值 4.3 session和request区别效果 5 Sess…...
Java——不同的子序列
题目链接 leetcode在线oj题——不同的子序列 题目描述 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新…...
Git 基本操作之Git GUI界面和git命令行如何选择
1. 为啥推荐使用git命令行 我发现公司有很多的同事都喜欢使用git的GUI界面工具,喜欢鼠标点点点就完成了代码的提交,这种方式的确是比较简单便捷,但是却存在风险。先上一个事故给大家醒醒脑。 VScode Git 界面操作引发的惨案 上面的惨案是VS…...
Python编程 动态爱心
作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.所用库 1.random简介 2.math 简介 3.tkinter库的简介 二.实际图 三.…...
JavaScript :基础语法
位置: HTML 中的 Javascript 脚本代码必须位于 <script> 与 </script> 标签之间。 JavaScript 输出方式 window.alert() 弹出警告框。document.write() 将内容写到 HTML 文档中。innerHTML 写入到 HTML 元素。console.log() 写入到浏览器的控制台。 …...
buu [AFCTF2018]Single 1
题目描述: Jmqrida rva Lfmz (JRL) eu m uqajemf seny xl enlxdomrexn uajiderc jxoqarerexnu. Rvada mda rvdaa jxooxn rcqau xl JRLu: Paxqmdyc, Mrrmjs-Yalanja mny oekay. Paxqmdyc-urcfa JRLu vmu m jxiqfa xl giaurexnu (rmusu) en dmnza xl jmrazxdeau. Lxd …...
Linux C++ 200行完成线程池类
文章目录1、atomic使用2、volatile关键字3、条件变量4、成员函数指针使用5、线程池6、主线程先退出对子线程影响7、return、exit、pthread_exit区别8、进程和线程的区别1、atomic使用 原子操作,不可分割的操作,要么完整,要么不完整。 #includ…...
C语言指针剖析(初阶) 最详细!
什么是指针?指针和指针类型野指针指针运算指针和数组二级指针指针数组什么是指针?指针是内存中一个最小单元的编号,也就是地址。1.把内存划分为一个个的内存单元,一个内存单元的大小是一个字节。2.每个字节都给定唯一的编号&#…...
AcWing语法基础课笔记 第三章 C++中的循环结构
第三章 C中的循环结构 学习编程语言语法是次要的,思维是主要的。如何把头脑中的想法变成简洁的代码,至关重要。 ——闫学灿 学习循环语句只需要抓住一点——代码执行顺序! while循环 可以简单理解为循环版的if语句。If语句是判断一次…...
A simple freeD tracking protocol implementation written in golang
可以使用的go版本freed调试代码 可以通过udp发送和接收数据 What is freeD? freeD is a very simple protocol used to exchange camera tracking data. It was originally developed by Vinten and is now supported by a wide range of hard- and software including Unreal…...
简约精美电商小程序【源码好优多】
简介 一款开源的电商系统,包含微信小程序和H5端,为大中小企业提供移动电子商务优秀的解决方案。 后台采用Thinkphp5.1框架开发,执行效率、扩展性、稳定性值得信赖。并且Jshop小程序商城上手难度低,可大量节省定制化开发周期。 功…...
全网详解 .npmrc 配置文件:比如.npmrc的优先级、命令行,如何配置.npmrc以及npm常用命令等
文章目录1. 文章引言2. 简述.npmrc3. 配置.npmrc3.1 .npmrc配置文件的优先级3.2 .npmrc设置的命令行3.3 如何设置.npmrc4. 配置发布组件5. npm常用命令6. 重要备注6.1 yarn6.2 scope命名空间6.3 镜像出错1. 文章引言 今天在某低代码平台开发项目时,看到如下编译配置…...
从0开始学python -31
Python3 模块-1 在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互…...
Jenkins的使用教程
介绍: Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 目的: 最重要目的就是把原来分散在各个机器上繁杂的工作全部…...
1.Maven的坐标和依赖
【maven坐标】1.groupId: 通常与域名反向一一对应2.artifactId: 通常使用实际项目名称3.version: 项目当前版本号4.packaging:maven项目的打包方式,默认是jar5.classifier: 定义构建输出的一些附属构件,例如:nexus-indexer-2.0.0.…...
Jenkins 笔记
Jenkins brew install jenkins-lts brew services restart jenkins-lts brew services stop jenkins-lts b999ff5683464346b6d083f894968121 l 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,…...
Python和Java语言,哪个更适合做自动化测试?
经常有测试新手问我:Python和Java语言,哪个更适合做自动化测试?本来想简单的回答一下的,但又觉得对不起大家对小编的信任。因此,小编今天专门写了一篇文章来回答这个问题。欢迎各位大佬补充~1、什么是自动化测试&#…...
peaqOS 给机器发了一份穆迪式评级,机器经济缺的最后一块零件被补上了
作者:PaperMoon团队 “It’s time for blockchain to live up to its full potential。” 这种句子在 2026 年的 Web3 推文里已经少见了,大部分项目方学会了克制。peaq 这次不克制,而且把"全新资产类别"这种 2017 年级别的措辞重新…...
MODCAR:一种高效并发工业通信协议
什么是 MODCAR?MODCAR 是一个面向工业现场总线与以太网的并发通信协议。它的名字由两部分组成:MOD —— 致敬经典的 Modbus 协议,继承了其功能码、寄存器/位操作等易用特性。CAR —— Concurrent Access & Response(并发访问与…...
现代Web应用特性管理:从概念到工程实践
1. 项目概述:一个面向现代Web开发的特性管理工具 如果你和我一样,长期在Web应用开发的一线摸爬滚打,那你一定对“特性开关”这个概念不陌生。简单来说,它就像你家里电灯的总闸,可以随时控制某个功能是“亮”还是“灭”…...
独立开发者如何利用 Taotoken 的模型广场为不同产品功能匹配合适模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用 Taotoken 的模型广场为不同产品功能匹配合适模型 对于独立开发者而言,运营多个小型产品是常态。这…...
白起杀降将卒,项羽杀降,黄巢他们有的选择吗?
杀降不是暴君的个人意志,而是一场场被逼到极限的“系统自保”。 白起要为40万战俘找活路,项羽要喂活20万张嘴并防止后院起火,黄巢要让自己和十几万兄弟明天不饿死。杀降本身这份“答卷”固然是反人类的,但那份出题人的冷酷与无情&…...
Awesome List Creator:基于规则引擎的自动化资源清单生成工具
1. 项目概述:一个清单的“引擎”在信息过载的时代,无论是开发者寻找工具库,还是学习者梳理知识体系,一份结构清晰、内容精选的“Awesome List”(优质资源清单)都堪称无价之宝。然而,维护一份高质…...
异构GPU推理优化:Tessera架构解析与实践
1. 异构GPU推理的性能瓶颈与挑战在当前的AI推理服务部署中,混合使用不同代际的GPU已经成为提升性价比的常见做法。比如将最新的H100与相对便宜的L40S搭配使用,或者将计算密集型的B200与内存优化的H100组合部署。然而,这种异构环境下的资源利用…...
Midjourney生成图落地PS的7大断层痛点:从提示词对齐、分辨率陷阱到图层级精修,一文打通AI与专业图像处理全链路
更多请点击: https://intelliparadigm.com 第一章:Midjourney与Photoshop整合方案的底层逻辑与工作流重构 Midjourney 生成的图像虽具高美学质量,但缺乏图层控制、非破坏性编辑及像素级精度,而 Photoshop 正是弥补这一缺口的核心…...
终极指南:如何将ideas-for-projects-people-would-use中的创意变为现实
终极指南:如何将ideas-for-projects-people-would-use中的创意变为现实 【免费下载链接】ideas-for-projects-people-would-use Every time I have an idea, I write it down. These are a collection of my top software ideas -- problems I think enough people …...
一人一书一时代:《凰标》是海棠山铁哥的东方文明宣言@凤凰标志
一人执笔,一书立世,一作定时代。 ——《凰标》题记一、破题:当网文只剩“爽点”,谁来承载文明?行业通病《凰标》回应娱乐至死以笔墨思考时代碎片叙事构建完整文明体系功利写作以文载道,以书传文明 二、个人…...
