采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
悟空老师,我看了视频后自己默写了一遍,自己写的时候和您的代码有些不同。其中可不可以将put方法和add方法中的while改成if?
不可以,如果多个线程同时被唤醒,那么都需要再次检查是否满足被唤醒的条件,因为其中一个线程被唤醒后继续执行,另外的线程这个时候就需要重新进入等待状态,如果用while就可以实现,但是if无法实现。
非常感谢!
老师, 我说一下我的理解 不知道对不对 假设一个if的场景 : 有3个生产者, 1个消费者, 当前2个生产者处于wait,1个生产者处于blocked,接下来消费者获得monitor,消费了一次,唤醒了一个生产者,消费者又消费了一次,又唤醒了一个消费者,当前状态是3个生产者都是blocked状态(其中有两个是从wait转化为blocked),接下来生产者获(wait转化为blocked)得了monitor,开始执行生产代码,接下来生产者(一直处于blocked)再次获得monitor,执行生产代码,因为消费者消费了两个,生产者生产了两个,这时候是没问题的,接下来还是生产者获得了monitor,此生产者为wait转化为blocked,如果用if,他不会进行size的判断,直接生产,这样造成了比最大值多生产了一个,如果用while,则会再次判断,发现达到了最大值,则继续wait,不会生产。 不知道 我理解对不对
恩对的
如果只有一个生产者线程和一个消费者线程是可以的吧。
恩是的
登录后可查看更多问答,登录/注册
完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题
1.9k 26
940 12
1.1k 12
2.5k 12
1.1k 11