请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

可以将put方法和add方法中的while改成if吗?

悟空老师,我看了视频后自己默写了一遍,自己写的时候和您的代码有些不同。其中可不可以将put方法和add方法中的while改成if?图片描述图片描述

正在回答

2回答

不可以,如果多个线程同时被唤醒,那么都需要再次检查是否满足被唤醒的条件,因为其中一个线程被唤醒后继续执行,另外的线程这个时候就需要重新进入等待状态,如果用while就可以实现,但是if无法实现。

1 回复 有任何疑惑可以回复我~
  • 提问者 idx0 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2020-01-31 22:06:15
  • 老师, 我说一下我的理解 不知道对不对
    假设一个if的场景 : 有3个生产者, 1个消费者, 当前2个生产者处于wait,1个生产者处于blocked,接下来消费者获得monitor,消费了一次,唤醒了一个生产者,消费者又消费了一次,又唤醒了一个消费者,当前状态是3个生产者都是blocked状态(其中有两个是从wait转化为blocked),接下来生产者获(wait转化为blocked)得了monitor,开始执行生产代码,接下来生产者(一直处于blocked)再次获得monitor,执行生产代码,因为消费者消费了两个,生产者生产了两个,这时候是没问题的,接下来还是生产者获得了monitor,此生产者为wait转化为blocked,如果用if,他不会进行size的判断,直接生产,这样造成了比最大值多生产了一个,如果用while,则会再次判断,发现达到了最大值,则继续wait,不会生产。
    不知道 我理解对不对
    回复 有任何疑惑可以回复我~ 2020-05-09 11:50:59
  • 恩对的
    回复 有任何疑惑可以回复我~ 2020-05-09 11:54:09
fengshenwonderful 2020-05-26 17:09:39

如果只有一个生产者线程和一个消费者线程是可以的吧。

0 回复 有任何疑惑可以回复我~
  • 悟空 #1
    恩是的
    回复 有任何疑惑可以回复我~ 2020-05-26 17:36:07
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信