Java多线程中的死锁问题

news/2025/2/26 6:11:42

1.什么是死锁

线程在获取资源的时候,由于获取不到,导致线程卡死(阻塞),程序就不执行了。

2.发生死锁的情况

1.一个线程获取一把锁

一个线程如果同时获取一把锁两次,如果是可重入锁,就没有问题

如果是不可重入锁就会发生死锁问题

2.两个线程获取两把锁

线程A在等待线程B,线程B在等待线程A,循环等待造成死锁问题

线程0获取到了锁1,线程1获取到了锁2,线程0等待锁2,线程1等待锁1,相互等待,无法释放造成了死锁。

3.多个线程获取多把锁

线程A等待线程B释放锁,线程B等待线程C释放锁,线程C等待线程A释放锁

3.造成死锁的原因

1.互斥访问:线程1拿到了锁1,线程2就不能同时得到该锁(互斥锁)

2.不可抢占:获取到锁的线程,除非自己主动释放锁,别的线程不能从它手里抢过来

3.保持与请求:线程1已经获取到了锁A,还要在这个基础上去获取锁B

4.循环等待:线程1等待线程2获取锁,线程2等待线程3获取锁,线程3等待线程1获取锁……

以上四条是造成死锁的必要条件,也就是说只要打破一条,死锁就不会形成。

4.分析如何解决死锁问题

1.互斥访问:锁的基本特性,不能打破。

2.不可抢占:锁的基本特性不能打破。

3.保持与请求:与代码的设计和实现相关,是可以打破的,只要规定一下获取锁的顺序。

4.循环等待:也可以打破,从设计的角度去合理的获取锁。


http://www.niftyadmin.cn/n/5868155.html

相关文章

Maven 从下载到实战,xml帮助文档

一、Maven 免费下载 1. 官方下载地址 官网推荐:访问 Maven 官网,选择最新稳定版本(如 3.8.1 或 3.6.3)的 bin.zip 文件179。 国内镜像:若官网下载缓慢,可使用以下网盘资源(注意版权风险&#…

Mac 上安装多版本的 JDK 且实现 自由切换

1.可以通过查看以下目录中的内容,确认当前已经安装的 jdk 版本。 cd /Library/Java/JavaVirtualMachines2.命令行查看 jdk 的安装路径 /usr/libexec/java_home -V3.下载要安装的jdk版本,修改环境变量( cat ~/.bash_profile) # 定义JDK 8和JDK 17的安装路…

Ajax数据采集与分析详解

文章目录 1. 什么是 Ajax?2. Ajax 的工作原理3. Ajax 在网页中的应用场景4. 爬取 Ajax 数据的方法4.1 分析网络请求4.2 模拟 Ajax 请求4.3 使用 Selenium 模拟浏览器4.4 使用 Headless 浏览器 5. 处理动态参数6. 处理分页和滚动加载7. 处理反爬虫机制8. 数据存储9. …

IPTools for .NET:快速查询全球IP信息

IPTools for .NET:快速查询全球IP信息 IPTools 是一个用于快速查询全球 IP 地址信息的库,支持国内和国际 IP 查询,提供详细的地理位置信息(如国家、省份、城市)以及经纬度等数据。 1. IPTools.China IPTools.China …

Vue 中动态实现进度条

在 Vue 中动态实现进度条,基本上有两种常见的方法:直接通过 Vue 数据绑定控制样式,或者利用外部库来实现更复杂的功能。我们会深入探讨这两种方式,并且详细说明每种方法的实现步骤、优缺点以及使用场景。 1. 使用 Vue 数据绑定来…

SQL*PLUS命令

SQL*Plus概述 SQL*Plus工具是随Oracle 数据库服务器或客户端的安装而自动进行安装的管理与开发工具,Oracle数据库中所有的管理操作都可以通过SQL*Plus工具完成,同时开发人员利用SQL*Plus可以测试、运行SQL语句和PL/SQL程序。 运行方式: 命令…

国科大——数据挖掘(0812课程)——课后作业

前沿: 此文章记录了2024年度秋季学期数据挖掘课程的三次课后作业,答案仅供参考。 第一次作业 1 假定数据仓库中包含4个维:date, product, vendor, location;和两个度量:sales_volume和sales_cost。 1)画…

金属热变形分析创新案例:红外相机与DIC技术耦合应用的深度研究与应用

一、方案背景 在航空航天、汽车制造、能源装备等领域,金属材料需要在高温和复杂应力条件下工作,热变形分析是确保材料可靠性和安全性的重要手段。 金属材料塑性变形阶段,大部分塑性功转化为热能,导致变形过程中温升,…