线程交替打印输出时虚拟机一直运行问题求惑

博客探讨了Java线程交替打印输出时遇到的死锁问题。作者指出,死锁的直接原因是同步代码块置于while循环之外,并分析了可能的死锁原因。尽管将`synchronized`关键字放在循环内可以避免打印输出,但仍然存在死锁。作者通过实验发现,线程可能在同步代码块执行前就进入循环,导致线程等待并最终形成死锁。正确的实现方式是在while循环内部使用同步代码块并用if语句进行条件判断,以避免死锁。
摘要由CSDN通过智能技术生成

这为什么会死锁?

 

答:直接原因是将同步代码块套在了while循环语句的外面,出现了上面这样的两个线程总共执行三次后死锁,但是为什么会执行三次后死锁仍不清楚,将synchronized放在while循环里面能够完成输出,但是依旧死锁,如下,可以看到红色正方形依旧亮起,表示仍然在运行

 

不应该啊照理说,线程1进入while循环是num=100,在同步代码中唤醒线程2后打印num,再递增num,此时num=101,然后线程1执行wait进入等待状态,线程2被唤醒后进入就绪状态,拿到时间片执行run时应该num=101进不去while语句

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值