import lombok.Data;
import java.util.concurrent.CountDownLatch;
/**
* 线程抽象类
*/
@Data
public abstract class AbstractRunnable implements Runnable {
private CountDownLatch countDown; // 计数器
private String eventName; // 要执行的事件
private boolean ok; // 是否ok的标志
public AbstractRunnable(CountDownLatch countDown, String eventName) {
this.countDown = countDown;
this.eventName = eventName;
this.ok = false;
}
@Override
public void run() {
try {
check();
ok = true;
} catch (Exception e) {
e.printStackTrace();
ok = false;
} finally {
if (countDown != null) {
countDown.countDown();
}
}
}
/**
* 具体的业务逻辑
*/
public abstract void check();
}
import java.util.concurrent.CountDownLatch;
/**
* 执行事件的线程一
*/
public class OneEvent extends AbstractRunnable {
public OneEvent(CountDownLatch countDown) {
super(countDown, "第一个事件 X");
}
@Override
public void check() {
System.out.println("正在执行 [" + this.getEventName() + "]...");
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行 [" + this.getEventName() + "] 完毕...");
}
}
import java.util.concurrent.CountDownLatch;
/**
* 执行事件的线程二
*/
public class TwoEvent extends AbstractRunnable {
public TwoEvent(CountDownLatch countDown) {
super(countDown, "第二个事件 Y");
}
@Override
public void check() {
System.out.println("正在执行 [" + this.getEventName() + "]...");
try {
Thread.sleep(6000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行 [" + this.getEventName() + "] 完毕...");
}
}
import java.util.concurrent.CountDownLatch;
/**
* 执行事件的线程三
*/
public class ThreeEvent extends AbstractRunnable {
public ThreeEvent(CountDownLatch countDown) {
super(countDown, "第三个事件 Z");
}
@Override
public void check() {
System.out.println("正在执行 [" + this.getEventName() + "]...");
try {
Thread.sleep(5000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行 [" + this.getEventName() + "] 完毕...");
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* 启动类
*/
public class CheckStartUp {
public static boolean checkAllStations() throws Exception {
// 初始化3个
CountDownLatch countDown = new CountDownLatch(3);
// 把所有站点添加进list
List<AbstractRunnable> stationList = new ArrayList<>();
stationList.add(new OneEvent(countDown));
stationList.add(new TwoEvent(countDown));
stationList.add(new ThreeEvent(countDown));
// 使用线程池
Executor executor = Executors.newFixedThreadPool(stationList.size());
for (AbstractRunnable center : stationList) {
executor.execute(center);
}
// 等待线程执行完毕
countDown.await();
for (AbstractRunnable center : stationList) {
if (!center.isOk()) {
return false;
}
}
return true;
}
public static void main(String[] args) throws Exception {
boolean result = CheckStartUp.checkAllStations();
System.out.println("事件执行结果为:" + result);
}
}
![](https://img-blog.csdnimg.cn/12e183f5448a43ad957ea03f213eadba.png)