案例发生死锁的分析
根据我自己的测试:
1.当Producer线程连续两次比Consumer线程先获得对象queue的锁(也就cpu是连续两次运行queue.set(),此时flag为true,Producer线程开始等待),并且之后Consumer线程再连续两次获得对象queue的锁(也就是cpu连续两次运行queue.get(),此时flag为false,Consumer线程开始等待),这样就死锁了。
2.同理,Consumer线程连续两次比Producer线程先获得锁,之后Producer线程再连续两次获得锁,也会导致死锁。
感觉概率还是比较低的,毕竟两个线程都要连续两次获得锁。我的分析对吗,会有两种情况死锁是吧?实际测试只出现了一种情况的死锁,不知道是不是测试太少了。
27
收起
正在回答
1回答
同学您好,当第二次重复执行Producer线程或者Consumer线程时,由于第一次执行时,已经对标记变量进行过修改,所以第二次并不会在此处进行阻塞,而是直接释放CPU的占有权。接下来也是如此,无论多少次重复该线程,都会立即释放CPU的占有权,也就不会形成死锁。
祝同学学习愉快~
java工程师2020版
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星