继承Runnable接口的实现类开启两个线程时候为什么无法用break跳出run方法内部的死循环
下面是继承Runnable接口的实现类,就是创建一个生产包子的线程 生产数量达到一定值会停止
public class BaoZiMarket implements Runnable {
//创建包子参数
private BaoZi bao;
//定义count变量用于改变包子类型
int count = 0;
//定义一个包子生产的数量
int bNum = 0;
//创建带参构造函数
public BaoZiMarket(BaoZi bao) {
this.bao = bao;
}
@Override
public void run() {
//创建一个死循环用来保证程序一直运行
end: while (true) {
//创建同步代码块
synchronized (bao) {
// 报出线程名字
System.out.println(Thread.currentThread().getName());
// 线程激活状态下开始生产两种包子
if (count % 2 == 0) {
bao.pi = "冰皮";
bao.xian = "豆沙";
System.out.println("生产了" + bao.pi + bao.xian + "的包子");
// 包子生产完毕改变包子状态
bao.flag = true;
} else {
bao.pi = "面皮";
bao.xian = "牛肉";
System.out.println("生产了" + bao.pi + bao.xian + "的包子");
// 包子生产完毕改变包子状态
bao.flag = true;
}
count++;
bNum++;
// 设定生产时间 每一秒生产一个
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 当生产数量达到3个包子则不再生产
if (bNum == 3) {
break end;
}
}
}
}
}
接下来是负责运行的主类
public class CallUpMake {
public static void main(String[] args) {
BaoZi bao=new BaoZi();
BaoZiMarket bm=new BaoZiMarket(bao);
Thread t1=new Thread(bm);
Thread t2=new Thread(bm);
t1.start();
t2.start();
}
}
开启两个线程的时候run方法中用来限制的break并没有用
但是如果只开启一个线程就不会有事
public class CallUpMake {
public static void main(String[] args) {
BaoZi bao=new BaoZi();
BaoZiMarket bm=new BaoZiMarket(bao);
Thread t1=new Thread(bm);
// Thread t2=new Thread(bm);
t1.start();
// t2.start();
}
}
这是运行结果
我知道平时线程不会用break跳 但还是想知道造成这样的原因是什么 拜托哪位大佬知道说一下 编辑器是IDEA