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();


}

}

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

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

    你start 两次,开启了两次;
    break;
    肯定退出了,
    不过你又重新执行了一次;

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

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());
然后退出循环。