老师,我这里有两个问题
1中,他是随机抢占CPU资源的,这个我知道
2中,即使用了join方法,他也是随机抢占CPU的资源吗?我测试了是的,这个join加不加并没有啥用,和上面是一样的效果,请老师解惑!
我这里把notifyAll先注释掉了,我们先分析下。
生产为0的时候,他是先执行了setN方法,设置为0,这里没有触发 flag
消费为0的时候,他是执行了getN方法,得到0 , 这里没有触发 flag
生产为1的时候,他是执行了setN方法,设置为1,这里也没有触发 flag
下面就没有执行了,说明他是又触发了setN方法,因为这是线程的随机抢占CPU造成的,所以进入了if判断,变成了等待状态,他既然变成了等待状态,那他是不是还会继续执行这个setN方法下面的代码,不然怎么执行下面解开等待状态的代码?我就是这里不太明白,他是变成等待状态以后就不执行这个方法下面的代码了,还是继续执行完这个方法下面的代码?
正在回答 回答被采纳积分+1
啊啊啊,我知道第二个图片的问题,应该是怎么回事了,我又仔细想了一下应该是这样的!
1--他在第二步消费为0上面应该就已经出错了。
首先,第一次,他先执行消费的方法,输出了0,把flag,变成了true!
重点来了!!!
他第二次又执行了消费的方法,此时flag为true,进入了if判断,把这个线程变成了等待状态!这个线程下面的代码也不会执行了!
他只能去执行生产的方法,生产的的方法执行一遍后,输出n的值,并且flag变成了false
因为现在只有一个线程了,也没有别的线程和他抢CPU使用权了,所以他只能再执行这个线程了,然后进入了if判断,这个线程也变成等待状态了!!
老师,我分析的对吗?不对的话请指教,还有第一个图片的问题,我不大懂
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星