while和if的区别

来源:互联网 发布:米奥软件 编辑:程序博客网 时间:2024/06/10 06:32

刚在看多线程通信的时候用到了判断,发现while和if还是有区别的,以前想当然认为都是判断条件的,

while循环语句,可以执行多次,if是条件语句,只是单次执行。

while(表达式) 语句组; 计算表达式,若为真,执行语句,并重复该过程,直到为假时,执行下一条语句。 

例如:while(k>0)i++;表示只要k>0,就执行i++;直到等到k<=0时,不执行i++;程序执行下面的语句。

比如多线程中的语句:

while(flag)
            try{this.wait();}catch(Exception e){}//t1(放弃资格)  t2(获取资格)
        this.name = name+"--"+count++;

如果这里的while换成if,将会出现错误,因为t2等待后被唤醒,如果是if,经过单次判断后不会再进行判断,这时t2有可能会覆盖掉t1的结果,而while会多次执行,避免出现覆盖。

而且 当开启三个这样的线程打印不同的语句用if每个打印一遍也就全部wait了但是你用while会一直执行

private int flag=1;
public void print() throws InterruptedException{
synchronized (this) {
if (1!=flag){
this.wait();//当前线程dnengda
}
System.out.print("你");
System.out.print("黑");
System.out.print("\r\n");
flag=2;
this.notify();//
}
}

当然了你可以吧notify换成notifyall但是依然达不到三个线程一个接一个执行的效果,

原创粉丝点击