登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
1
2
/ 2 页
下一页
返回列表
首页
›
资源区
›
代码
›
编写一段代码,使其必定产生死锁
编写一段代码,使其必定产生死锁
[ 复制链接 ]
JulianaEgg
2025-5-28 22:36:14
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
编写一段代码,使得这段代码必定会产生死锁
使用Thread.sleep
以下是一个经典的 Java 死锁实现,通过两个线程互相持有对方需要的锁来确保必定发生死锁:
public class DeadlockDemo {
// 创建两个锁对象
private static final Object lock1 = new Object();
private static final Object lock2 = new Object();
public static void main(String[] args) {
// 线程1:先获取lock1,再尝试获取lock2
Thread thread1 = new Thread(() -> {
synchronized (lock1) {
System.out.println("线程1持有lock1,等待lock2...");
try {
Thread.sleep(10000); // 等个10秒增加死锁概率
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2) {
System.out.println("线程1成功获取lock2");
}
}
});
// 线程2:先获取lock2,再尝试获取lock1
Thread thread2 = new Thread(() -> {
synchronized (lock2) {
System.out.println("线程2持有lock2,等待lock1...");
try {
Thread.sleep(10000); // 等个10秒增加死锁概率
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1) {
System.out.println("线程2成功获取lock1");
}
}
});
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("程序正常结束(这行永远不会执行)");
}
}
复制代码
不使用Thread.sleep
可以使用 countDownLatch 来实现死锁,思路为:
新建一个count为2的 CountDownLatch 对象 latch。
thread1 持有 lock1 后,调用 latch.countDown() 将计数减一,随后调用 latch.await() 等待,直到 thread2 也持有 lock2 后调用 latch.countDownd()
thread2 持有 lock2 后,调用 latch.countDown()将计数减一,随后调用 latch.await() 直到 thread1 调用 latch.countDown()
thread1 想要 lock2,但 thread2 持有了它
thread2 想要 lock1,但 thread1 持有了它
由于互相等待对方释放锁,因此死锁发生
import java.util.concurrent.CountDownLatch;
public class GuaranteedDeadlock {
private static final Object lock1 = new Object();
private static final Object lock2 = new Object();
private static final CountDownLatch latch = new CountDownLatch(2);
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
synchronized (lock1) {
System.out.println("Thread 1: Holding lock1...");
latch.countDown(); // 让 thread2 也开始执行
try {
latch.await(); // 保证两个线程同时竞争
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock2) {
System.out.println("Thread 1: Acquired lock2!");
}
}
});
Thread thread2 = new Thread(() -> {
synchronized (lock2) {
System.out.println("Thread 2: Holding lock2...");
latch.countDown(); // 让 thread1 也开始执行
try {
latch.await(); // 保证两个线程同时竞争
} catch (InterruptedException e) {
e.printStackTrace();
}
synchronized (lock1) {
System.out.println("Thread 2: Acquired lock1!");
}
}
});
thread1.start();
thread2.start();
}
}
复制代码
除此之外,也可以使用CycliBarrier
错误示范
public class DeadlockExample {
private static final Object lock1 = new Object();
private static final Object lock2 = new Object();
public static void main(String[] args) {
Thread thread1 = new Thread(() -> {
synchronized (lock1) {
System.out.println("Thread 1: Holding lock1...");
// 试图获取 lock2
synchronized (lock2) {
System.out.println("Thread 1: Acquired lock2!");
}
}
});
Thread thread2 = new Thread(() -> {
synchronized (lock2) {
System.out.println("Thread 2: Holding lock2...");
// 试图获取 lock1(但 lock1 此时被 Thread1 持有)
synchronized (lock1) {
System.out.println("Thread 2: Acquired lock1!");
}
}
});
thread1.start();
thread2.start();
}
}
复制代码
上述的代码无法保证死锁,因为Java 的线程调度是由操作系统决定的,线程的执行顺序是不可预测的,thread1 可能会在 thread2 运行前快速获取 lock1 和lock2,然后释放它们,从而避免死锁
所以这段代码死锁的发生概率不是 100%。这也是为什么第一种方式要使用Thread.sleep来保证两个线程都分别获得了锁
来源:新程序网络收集,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
编写
一段
代码
使其
必定
相关帖子
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
杨辉三角原理及PHP代码实现
记一次 .NET 某低代码开发框架 内存暴涨分析
低代码 + AI = 对话方式生成UI
不写代码,用扣子编程部署 OpenClaw + 飞书机器人
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
.NET 代码保护实战:从混淆到虚拟机保护
DeepWiki 优化实战:代码行号与确定性目录生成
一行代码可能影响整个系统,嵌入式开发工具该怎么选?
【UWP】使用 Vue/Vite 编写 WinJS/UWP
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
安全
用AI写代码,我差点把漏洞发上线:血泪总结的10个教训
0
224
圣罩
2026-03-05
业界
杨辉三角原理及PHP代码实现
1
718
押疙
2026-03-05
业界
记一次 .NET 某低代码开发框架 内存暴涨分析
0
528
乱蚣
2026-03-09
业界
低代码 + AI = 对话方式生成UI
1
321
屠焘
2026-03-09
安全
不写代码,用扣子编程部署 OpenClaw + 飞书机器人
0
20
禄磊
2026-03-13
业界
在 PHP 中写真正的异步代码 TrueAsync 0.6.0 已支持数据库链接池
0
21
步雪卉
2026-03-14
安全
.NET 代码保护实战:从混淆到虚拟机保护
0
329
髭赌
2026-03-18
业界
DeepWiki 优化实战:代码行号与确定性目录生成
0
406
祖柔惠
2026-03-18
安全
一行代码可能影响整个系统,嵌入式开发工具该怎么选?
0
373
剩鹄逅
2026-03-19
安全
【UWP】使用 Vue/Vite 编写 WinJS/UWP
0
201
颜清华
2026-03-21
回复
(29)
腥狩频
2025-10-8 22:19:15
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
啤愿
2025-11-11 13:21:55
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
丝甲坞
2025-12-10 01:32:12
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个有用。
缣移双
2025-12-10 04:36:50
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
丧血槌
2025-12-14 13:08:32
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,试用一下
痨砖
2025-12-15 17:32:17
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
新版吗?好像是停更了吧。
汇干环
2026-1-14 10:25:08
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
很好很强大 我过来先占个楼 待编辑
毋峻舷
2026-1-22 21:03:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
收藏一下 不知道什么时候能用到
佴莘莘
2026-1-30 06:10:22
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
懂技术并乐意极积无私分享的人越来越少。珍惜
些耨努
2026-2-2 01:39:30
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享,下载保存了,貌似很强大
姬宜欣
2026-2-3 06:47:28
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢,下载保存了
墨佳美
2026-2-8 06:06:18
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢发布原创作品,程序园因你更精彩
告陕无
2026-2-8 17:32:05
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
感谢分享,学习下。
崔和美
2026-2-8 18:32:59
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
感谢分享
恿榫
2026-2-9 06:45:57
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
收藏一下 不知道什么时候能用到
方方仪
2026-2-9 07:01:41
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
东西不错很实用谢谢分享
林鱼
2026-2-9 13:46:51
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
喜欢鼓捣这些软件,现在用得少,谢谢分享!
啦汇
2026-2-9 23:19:49
回复
使用道具
举报
照妖镜
程序园永久vip申请,无限下载程序园所有程序/软件/数据/等
谢谢分享,辛苦了
富账慕
2026-2-10 06:02:48
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
不错,里面软件多更新就更好了
下一页 »
1
2
/ 2 页
下一页
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
签约作者
程序园优秀签约作者
发帖
JulianaEgg
2026-2-10 06:02:48
关注
0
粉丝关注
3
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991125
anyue1937
9994892
kk14977
6845359
4
xiangqian
638210
5
神泱
9522
6
韶又彤
9912
7
宋子
9878
8
荪俗
9016
9
闰咄阅
9995
10
刎唇
9995
查看更多
今日好文热榜
214
从车载HMI到数字座舱平台:基于Qt与Qtitan
649
彻底告别OpenClaw使用焦虑:我给他装上了“
631
PingCraft:从需求文档到可追踪工作项的 Ag
774
【译】 数据摄取构建模块简介(预览版)(二
923
【故障公告】数据库服务器磁盘 MBPS 高造成
746
"Memory in the Age of AI Agents: A Surve
217
Prompt 焚诀——一个模板,终结你和 AI 的
516
【节点】[SampleTexture3D节点]原理解析与
168
记一次Webshell流量分析 | 添柴不加火
981
旧安卓手机部署openclaw
638
AI编程时代,35岁以上程序员将何去何从?
831
[Refactor]CPP Learn Data Day 1
5
Block Copy 的内存布局详解
620
把 Flask 搬进 ESP32,高中生自研嵌入式 We
9
渐得如意智能自动化办公平台——定义属于你
892
[AI/Agent/社交] AI Agent社交网络产品:Mo
528
C++协程入门
288
TCSSOFTDEPTCOPY.zip Can download source
805
Vue3 + Iframe 实战:打造企业级流程配置中
825
“你用AI,那我也会用AI,我还要你干什么?