这么写为什么会出现死锁

这么写为什么会出现死锁

我是在线程中进行通信的,实现阻塞和唤醒功能,Queue类中没有线程语句

Queue类:

http://img1.sycdn.imooc.com//climg/5b1121bb000170ff06740506.jpg

消费者:
http://img1.sycdn.imooc.com//climg/5b1121c60001ccd408570580.jpg

生产者:

http://img1.sycdn.imooc.com//climg/5b11213c0001018108850572.jpg

设计效果应该是先生产,n为1,然后消费,n为0,但是在运行的时候会出现死锁,请问是什么原因?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕雪 2018-06-01 18:52:31

线程的执行顺序你无法保证,先走一个生产,再走一个消费,永远都这样走下去,也有可能走了两次消费只走了一次生产。例如尚未生产的时候产生了一个消费,判断了一下发现这时候还没有生产出来呢,所以就处于wait()。然后生产者生产出来一个商品后,消费者也不知道,它永远在wait()因为没有人唤醒它。而因为没有消费掉产品,所以生产者也处于wait(),这样就死锁了。祝:学习愉快

  • 提问者 风中随影 #1
    但是当生产者生产之后我有些notifyAll()唤醒所有线程啊
    2018-06-01 19:58:58
  • 好帮手慕珊 回复 提问者 风中随影 #2
    同学,你把所有代码都贴出来,不截图,我们运行一下试试。祝学习愉快!
    2018-06-03 12:37:11
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师