package thread;
import java.util.ArrayList;
import java.util.List;
/**
* 模拟三个任务 多线程执行 有一个任务出问题 所有任务都结束恢复
*/
public class Thread01 {
public static void main(String[] args) {
Boos boos = new Boos();
MyTask myTask1 = new MyTask("1",4,true,boos);
MyTask myTask2 = new MyTask("2",3,true,boos);
MyTask myTask3 = new MyTask("3",1,false,boos);
boos.addList(myTask1);
boos.addList(myTask2);
boos.addList(myTask3);
boos.myTaskList.stream().forEach(MyTask::start);
}
private static enum Result{
NOTEND, SUCCESSED, FAILEED,CANCELLED
}
private static class MyTask extends Thread {
private Result result = Result.NOTEND;
private String name;
private int timeInSeconds;
private boolean success;
private Boos boos;
private boolean cancelling;
public MyTask(String name, int timeInSeconds, boolean success,Boos boos){
this.name = name;
this.timeInSeconds = timeInSeconds;
this.success = success;
this.boos = boos;
}
public Result getResult(){
return result;
}
@Override
public void run() {
try {
sleep(timeInSeconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + "任务结束");
result = success ? Result.SUCCESSED : Result.FAILEED;
boos.end(this);
}
// 每个任务不一样
private void rallback() {
}
// 线程退出(每个任务都不一样所以退出也不一样)
public void cancel(){
// 做标记 是否退出
cancelling = true;
}
}
// 管理者
private static class Boos extends Thread{
private List<MyTask> myTaskList = new ArrayList<>();
public void addList(MyTask myTask){ this.myTaskList.add(myTask); }
@Override
public void run() {
myTaskList.stream().forEach(myTask -> myTask.start());
}
public void end(MyTask myTask){
if (myTask.getResult() == Result.FAILEED){
// 直接结束
System.exit(0);
// 优雅的退出 一般不用 interrupt
// myTask.cancel();
}
}
}
}
模拟三个任务 多线程执行 有一个任务出问题 所有任务都结束恢复
最新推荐文章于 2023-05-28 19:12:16 发布