正在回答
2回答
同学你好,这里并不是被唤醒的哦~因为在前面的执行过程中,第一次flag等于false时,表示没有数据产生,数据为空,此时线程不进入等待,所以执行下面生产数据的代码,进入生产数据,生产完毕,容器中已经有数据, flag设置为true,线程执行进行消费,只有flag判断为ture时,进行消费,线程在前面的过程中可能会出现交换执行,这个是随机的,也可能会出现一开始就被阻塞哦~
但这里,两个的线程在执行过程可能会出现,当前线程自己调用了wait()方法进行等待了,会在中途执行另一个线程,这时当前线程为false,而另一个线程可能flag还没执行到为true时,但是同一时间都想要争夺CPU资源来进行生产和消费,就造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。所以要添加notifyAll()进行唤醒线程~
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星