Java 交替打印A,B,C问题

本文通过分析一个具体的Java多线程示例程序,详细解析了线程间的wait和notify机制如何工作,以及不当使用这些机制可能导致的死锁情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天无意中看到优快云上zyplus关于wait,notify的精彩讲述,原文地址在:http://blog.youkuaiyun.com/zyplus/article/details/6672775,但文中的示例程我拷贝下来后发现是死锁,看了下面的评论,找到了问题所在。仔细回想了程序的执行过程,还原了一下死锁的发生过程,过程如下。
这个程序的执行过程:线程a获取c的锁,获取自身锁,打印A,notify操作,c进行wait操作,线程a不能访问c;
切换到线程b,获取a的锁,获取自身锁,打印B,notify操作,a进行wait操作,线程b不能访问a;
切换到线程c,获取b的锁,获取到自身锁,打印C,notify操作(现在线程a可以访问c了),b进行wait操作;
进行完第9次时,b,a都进行了wait操作,线程b不能访问a,线程c不能访问b;第10次时线程a打开自身,关闭c(线程a不能访问c),同于线程b不能访问a,线程c不能该问b,第11次时线程a执行完,无法打开自身;那么线程b不能访问a,于是它就开始等待a打开自身,c就会等待b打开自身,从而锁住程序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值