关于flag的问题

关于flag的问题

视频中 最后修改完的代码

代码第五行 boolean flag=false

第八行代码的if(!flag)等于true,但是并没有改变flag自身原本的值,运行到17行flag还是等于false,

然后运行到22行的if(flag),在这里flag的值怎么突然变成true了? flag的值一直false啊,最后到32行代码flag值才变成了true啊


或者问视频里大约15:53的时候21行代码的flag的值怎么突然变成true了

正在回答

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

2回答

同学你好,在如下的代码中,flag为false,get()方法中,if(!flag)为true,消费的线程执行wait()方法,处于等待的状态。set()方法中,if(flag)为false,不执行if条件,向下执行,输出生产XX,并设置flag = true;调用notifyAll()方法,唤醒所有线程。再执行get()方法,此时的flag为true,if(!flag)为false,不执行if条件,向下执行,输出xiaofXX,再设置flag 为false,以此循环。

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

这里并不是当flag是true才开始执行set方法,而是当flag为false时,set()方法中if(flag)为false,不执行wait()方法,生产的线程没有处于等待状态,才执行set()方法中的输出语句。

祝:学习愉快~

好帮手慕阿慧 2020-06-19 18:54:45

同学你好,线程执行get()方法和set()方法是随机,不确定的。

最初flag的值为false,

当flag为false时,代表当前需要生成天气数据,读取天气方法get()处于等待。在生成天气数据完成后,会修改flag的值为true。

当flag为true时,代表当前需要读取天气数据,生成天气数据方法set()处于等待。在读取天气数据完成后,会修改flag的值为false。

如下:

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

如果我的回答解决了你的疑惑,请采纳!祝学习愉快~

  • 提问者 慕设计7678942 #1
    对于老师所说的 当flag为false时,代表当前需要生成天气数据,读取天气方法get()处于等待。在生成天气数据完成后,会修改flag的值为true。 我问一下老师在当flag为false时,代表当前需要生成天气数据,读取天气方法get()处于等待。要去执行set方法,但是 flag的值还是false,set方法执行的条件是flag是true才开始执行啊?
    2020-06-21 10:27:49
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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