要求:总共有3种菜,上菜必须等所有的菜都炒完才能上菜。
提示:如图可知:切菜需等待洗菜完成以后再切菜,所以切菜线程中先sleep(300);炒菜需先洗菜并切菜,所以炒菜线程中先sleep(500);因每人的CPU不同,所以适当增加sleep的时间以规避还未洗完就已经开始切菜,或者还未切菜就已经炒菜的问题
上菜ShangCai
package Homework;
public class Shangcai extends Thread {
@Override
public void run() {
for (int i = 1; i < 4; i++) {
System.out.println("上第" + i + "个菜");
try {
this.sleep(100);
System.out.println("第" + i + "个菜上完");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
炒菜操作ChaoCai
package Homework;
public class Chaocai extends Thread {
@Override
public void run() {
//规避提示的问题
try {
this.sleep(700);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
for (int i = 1; i < 4; i++) {
System.out.println("开始炒第" + i + "个菜");
try {
this.sleep(500);
System.out.println("第" + i + "个菜炒完了");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
切菜操作:QieCai
package Homework;
public class Qiecai extends Thread {
@Override
public void run() {
for (int i = 1; i < 4; i++) {
//规避提示的问题
try {
this.sleep(350);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
System.out.println("正在切第" + i + "个菜");
try {
this.sleep(200);
System.out.println("第" + i + "个菜切完了");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
洗菜操作洗菜:
package Homework;
public class Xicai extends Thread {
@Override
public void run() {
for (int i = 1; i < 4; i++) {
System.out.println("正在洗第" + i + "个菜");
//规避提示的问题
try {
this.sleep(300);
System.out.println("洗完第" + i + "个菜");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
测试类Test
package Homework;
public class Test1 {
public static void main(String[] args) throws InterruptedException {
Xicai xc = new Xicai();
Qiecai qc = new Qiecai();
Chaocai cc = new Chaocai();
Shangcai sc = new Shangcai();
xc.start();
qc.start();
cc.start();
xc.join();
qc.join();
cc.join();
sc.start();
}
}