老师,为什么if(!flag)为flase,flag不是初始赋值为flase吗?

老师,为什么if(!flag)为flase,flag不是初始赋值为flase吗?

老师,为什么if(!flag)为flase,flag不是初始赋值为flase吗?
下载视频          

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

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

1回答
好帮手慕阿园 2021-12-25 10:27:16

同学你好,当flag定义为false时,(!flag)表示的是true,(flag)表示的是false

而该案例中是先生产后消费,在set方法执行完毕,此时flag被设置为了true,

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

所以在get中if(flag){}是为true,这里需要取反为(!flag)

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

祝学习愉快~


  • 提问者 嫣语四然 #1

    可是线程的先后顺序是不确定的,万一先消费的线程先执行,那逻辑不就不通了吗?

    2021-12-26 10:50:51
  • 好帮手慕小尤 回复 提问者 嫣语四然 #2

    同学你好,根据课程代码解析代码,如下所示:

        第一次flag等于false时,表示没有数据产生,数据为空,此时线程不进入等待,所以执行下面生产数据的代码,进入生产数据,生产完毕,唤醒线程,容器中已经有数据, flag设置为true,进行消费,只有!flag判断为ture时,才可以进行消费。所以是可以避免在没有数据的情况下,先消费的情况。

    祝学习愉快!

    2021-12-26 11:45:09
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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