如何检测和避免线程死锁?

  在日常开发中涉及到多线程开发时候就很容易会产生死锁

what:

什么是线程死锁?

线程死锁是指两个或两个以上的线程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞现象。当这些线程互相持有对方所需要的资源时,会互相等待对方释放资源,如果线程都不主动释放所占有的资源,将产生死锁。若无外力作用,它们都将无法推进下去,此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的线程称为死锁线程。

Why

线程死锁产生的四个必要条件包括:

  1. 互斥条件:一个资源,或者说一个锁只能被一个线程所占用,当一个线程首先获取到这个锁之后,在该线程释放这个锁之前,其它线程均是无法获取到这个锁的。
  2. 占有且等待:一个线程已经获取到一个锁,再获取另一个锁的过程中,即使获取不到也不会释放已经获得的锁。
  3. 不可剥夺条件:任何一个线程都无法强制获取别的线程已经占有的锁。
  4. 循环等待条件:线程A拿着线程B的锁,线程B拿着线程A的锁,形成循环等待的局面。

如何检测死锁?

  1.可以使用jdk自带的命令

  • 使用jmapjstack等命令查看 JVM 线程栈和堆内存的情况。如果有死锁,jstack 的输出中通常会有 Found one Java-level deadlock:的字样,后面会跟着死锁相关的线程信息。另外,实际项目中还可以搭配使用topdffree等命令查看操作系统的基本情况,出现死锁可能会导致CPU、内存等资源消耗过高。

   2.可以使用jdk自带的工具( JDK 的 bin目录下面)

  • 采用 VisualVM、JConsole 等工具进行排查。

 一般的话会采用第三方 Arthas

How

如何预防和避免线程死锁?

  1. 破坏请求与保持条件:一次性申请所有的资源。

  2. 破坏不剥夺条件:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。

  3. 破坏循环等待条件:靠按序申请资源来预防。按某一顺序申请资源,释放资源则反序释放。破坏循环等待条件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619911.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法—堆排序

文章目录 堆排序堆思路过程建堆排序 代码实现 堆排序 时间复杂度:O(N*logN) 稳定性:不稳定(相同元素排序后的相对位置改变) 堆 堆的逻辑结构是一棵完全二叉树;堆的物理结构是一个数组,通过下标表示父子结…

Shell脚本学习(一):Shell内置命令与Shell运算符

Shell内置命令 理解内置命令的含义。 内置命令介绍 Shell内置命令,就是由Bash Shell自身提供的命令,而不是文件系统中的可执行文件。 使用type 可以用来确定一个命令是否是内置命令: type 命令演示: 对于上述演示的两个命令来…

普乐蛙VR神州飞船设备VR太空舱体验馆VR博物馆

中国航天式浪漫知多少?千百年来古人对浩瀚宇宙有着无尽的浪漫想象,而在一代又一代中国航天事业奋斗者的努力中,远古神话不再是幻想,它终被照进现实——中国载人飞船“神舟”、中国载人空间站“天宫”、中国绕月人造卫星“嫦娥一号…

mybatis的一对多

业务:通常主表从表 查询,一对多关系,通常是先查主表,然后拿主表的 关联字段与从表关联。在代码中 通常用for 循环等方法给 从表的数据赋值,很麻烦,,,很麻烦。。。。 用mybatis的…

Linux 正则表达式及三剑客(awk、grep、sed)

原文:https://blog.iyatt.com/?p14465 1 前言 2024.4.8 昨天接了一个代写单子,要求用 Python 实现 sed 的部分功能。我用 Linux 也有几年了,基本的命令知道,但是几乎没有写涉及高级功能的 shell 脚本,所以对于正则表…

小米汽车值得去吗?最终拒了 offer。

车企选择 今天逛某职场 App 时,无意间看到一篇寻求 offer 抉择意见的帖子: 这位同学刚从加班闻名(但 CEO 强调既学华为狼性,也学华为分配)的理想汽车离职。 经过了 6 轮面试,收到了小米 offer,但…

QT文本操作

文本的操作 文本的读写流程 文本的读写流程 // 文本的读写流程// 1.打开文件》打到文本》QFileDialog::getOpenFileName返回的是// 一个字符串,包括了路径文件名字// open()方法打开文本// 2.读写文本// readAll(),readLine(),write()// 3.关闭文本 // close()使用…

2024年文化、历史与人文艺术与社会发展国际会议(CHHASD2024)

2024年文化、历史与人文艺术与社会发展国际会议(CHHASD2024) 会议简介 2024年国际文化、历史、人文、艺术与社会发展会议(CHHASD2024)将在中国武汉举行,主题为“文化、历史,人文、艺术和社会发展”。CHHASD2024汇集了来自世界各…

postman接口测试(入门到精通)

下载: postman官方地址 测试外部接口:测试被测系统和外部系统之间的接口。(只需要测试正例即可) 测试内部接口: 1.内部接口只提供给内部系统使用。(只需要测试正例即可) 2.内部接口提供给外…

0.25W 3KVDC 隔离单双输出DC/DC SMD型电源模块 ——TPAT-W2 系列

TPAT-W2系列是一款标准的表面贴装电源模块,完全实现采用全自动贴片机来组装和满足回流焊工艺,大大提高产能和人工费用,提供正负双输出,工业级环境温度。此系列产品小巧,效率高,低输出纹波及提供3000V以上的…

Eland上传bge-large-zh-v1.5向量化模型到ElasticSearch中

最近需要做一些向量检索,试试ES 一、准备 系统:MacOS 14.3.1 ElasticSearch:8.13.2 Kibana:8.13.2 本地单机环境,无集群,也不基于Docker BGE是一个常见的文本转向量的模型,在很多大模型RAG应…

模型预测控制MPC(2)—— 无约束线性MPC

前文:模型预测控制MPC(1)—— 基础概念参考:模型预测控制(2022春)本文从偏控制的角度介绍无约束线性MPC方法, x , u , J x,u,J x,u,J 分别代表状态、动作和代价函数 文章目录 1. 问题定义1.1 多…