2 duanchuanzhi duanchuanzhi 于 2016.04.24 23:34 提问

while循环为什么跳出了还会再运行一次 新人求知道

实体类
package com.pij.bean;

public class bean {
private int num = 501;

public int getNum() {
    return num;
}

public void setNum(int Num) {
    this.num = num - Num;
}

}

实现接口
package com.pij.imp;

import com.pij.bean.bean;

public class imp implements Runnable {
bean bn = new bean();

@Override
public void run() {

    bea(50);

}

public synchronized void bea(int num) {

    while (true) {

        if (bn.getNum() >= num) {

            System.out.println("你在使用网络系统调用的货物预定");
            System.out.println("现存备货:" + bn.getNum());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.err.println(Thread.currentThread().getName()
                    + "货物调用预定成功");
            bn.setNum(num);
        } else {
            System.out.println("仓库备货不足");
            System.out.println("现存货数量:" + bn.getNum());
            break;

        }


    }
}

}

测试类
package com.pij.text;

import com.pij.imp.imp;

public class test {
public static void main(String[] args) {
imp a = new imp();
Thread b1 = new Thread(a);
Thread b2 = new Thread(a);

    b1.setName("五厂XX");
    b2.setName("二厂XXX\t\t\t\t");
    b1.start();
    b2.start();


}

}

5个回答

caozhy
caozhy   Ds   Rxr 2016.04.24 23:39

何以见得多运行了一次?你有两个线程,考虑到这个了么

CSDNXIAOD
CSDNXIAOD   2016.04.24 23:42

C语言 while(feof(fp)){}多循环一次解决方案
打印九九乘法表,要求:只能使用一次for循环,不能使用递归,while
跳出while/for循环
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

q610098308
q610098308   2016.04.24 23:47

b1.start();
b2.start();

    你start 两次,开启了两次;
    break;
    肯定退出了,
    不过你又重新执行了一次;
w172087242
w172087242   Ds   Rxr 2016.04.25 09:26

是你启动了两个线程的关系,每根线程是独立运行的,所以控制台会打印两次循环内容。

erichk2008
erichk2008   2016.04.25 17:30

Thread b1 执行到num=1的时候,会打印1次
System.out.println("仓库备货不足");
System.out.println("现存货数量:" + bn.getNum());
然后退出循环。

但是这个时候Thread b2 并没有执行到break;代码,所以还是会执行一次num=1,打印一次
System.out.println("仓库备货不足");
System.out.println("现存货数量:" + bn.getNum());
然后退出循环。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!