关于5-1flag判断问题,请老师解答一下
老师的原话是“当flag为false,也就是没有数字的时候要等待”
而在变量定义的时候就已经定义了 flag=false了
所以在get()方法中,应该写成if(flag)当没有数字的时候,需要等待。
老师写的是if(!flag),那这么理解的话 岂不是变成了 消费时,里面有数字时需要进行等待?
下面的set方法同样的问题,我就不多赘述了。我把老师代码,和我的代码贴出来对比一下,还请老师可以指出我的问题,绕的有点晕
老师视频中的代码:
视频中老师说的是if(!flag)为false,可是不应该为这里如果是!flag不是为true了吗?
下面是我的代码:
public class Queue { private int n; boolean flag = false; public synchronized int get() { if (flag) { try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("消费:" + n); flag = true; notifyAll(); return n; } public synchronized void set(int n) { if (!flag) { try { wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } System.out.println("生产:" + n); this.n = n; flag = false; notifyAll(); } }
0
收起
正在回答
1回答
get、set是一个同步方法,首先flag是false,这时候get方法检测if(!flag)就是true,就会进行等待,不能直接消费,等待什么呢,等待set方法的生产。而set方法if(flag)是flase,不需要执行等待过程,直接进行生产,生产完以后flag变成true,这个时候get方法判断if(!flag)就为flase不需要等待,可以消费,消费完flag设置为false。所以就实现了生产一次消费一次的模式。
Android零基础入门2018版
- 参与学习 人
- 提交作业 5461 份
- 解答问题 7238 个
此次推出的专题为Android攻城狮培养计划的第一部分语法与界面基础篇,将带大家从0开始学习Android开发。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星