老师,我这里有两个问题

老师,我这里有两个问题

http://img1.sycdn.imooc.com//climg/606496e90919577711390760.jpg

1中,他是随机抢占CPU资源的,这个我知道

2中,即使用了join方法,他也是随机抢占CPU的资源吗?我测试了是的,这个join加不加并没有啥用,和上面是一样的效果,请老师解惑!

http://img1.sycdn.imooc.com//climg/606496e90980cb2b12261185.jpg

我这里把notifyAll先注释掉了,我们先分析下。

生产为0的时候,他是先执行了setN方法,设置为0,这里没有触发  flag

消费为0的时候,他是执行了getN方法,得到0  , 这里没有触发  flag

生产为1的时候,他是执行了setN方法,设置为1,这里也没有触发  flag

下面就没有执行了,说明他是又触发了setN方法,因为这是线程的随机抢占CPU造成的,所以进入了if判断,变成了等待状态,他既然变成了等待状态,那他是不是还会继续执行这个setN方法下面的代码,不然怎么执行下面解开等待状态的代码?我就是这里不太明白,他是变成等待状态以后就不执行这个方法下面的代码了,还是继续执行完这个方法下面的代码?


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

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

1回答
阿山123 提问者 2021-04-01 00:11:44

啊啊啊,我知道第二个图片的问题,应该是怎么回事了,我又仔细想了一下应该是这样的!
1--他在第二步消费为0上面应该就已经出错了。
首先,第一次,他先执行消费的方法,输出了0,把flag,变成了true!
重点来了!!!
他第二次又执行了消费的方法,此时flag为true,进入了if判断,把这个线程变成了等待状态!这个线程下面的代码也不会执行了!
他只能去执行生产的方法,生产的的方法执行一遍后,输出n的值,并且flag变成了false
因为现在只有一个线程了,也没有别的线程和他抢CPU使用权了,所以他只能再执行这个线程了,然后进入了if判断,这个线程也变成等待状态了!!
老师,我分析的对吗?不对的话请指教,还有第一个图片的问题,我不大懂

  • 提问者 阿山123 #1

    所以他的运行逻辑就是,你执行过这个方法一次了,你如果在执行,我就把你变成等待状态,并且,不执行方法下面的代码了,让你强制去执行另一个线程,用另一个线程解开这个变成等待状态的线程,两个线程之间,你帮我,我帮你!哈哈哈!自己能想通真开心!

    2021-04-01 00:18:14
  • 好帮手慕小班 回复 提问者 阿山123 #2

    同学你好,同学的理解是正确的,这两个线程是互相帮助的。

    祝学习愉快!

    2021-04-01 10:44:04
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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