public abstract class ControllerCenter implements Runnable {
private CountDownLatch countDown;
private String controllerCenterName;
private boolean result;
public ControllerCenter(CountDownLatch countDown, String controllerCenterName) {
this.countDown = countDown;
this.controllerCenterName = controllerCenterName;
this.result = false;
}
@Override
public void run() {
try {
check();
result = true;
} catch (Exception e) {
e.printStackTrace();
result = false;
} finally {
if (countDown != null) {
countDown.countDown();
}
}
}
/**
* 子类重写
* @return
*/
protected abstract void check();
public CountDownLatch getCountDown() {
return countDown;
}
public void setCountDown(CountDownLatch countDown) {
this.countDown = countDown;
}
public String getControllerCenterName() {
return controllerCenterName;
}
public void setControllerCenterName(String controllerCenterName) {
this.controllerCenterName = controllerCenterName;
}
public boolean isResult() {
return result;
}
public void setResult(boolean result) {
this.result = result;
}
}
public class AControllerCenter extends ControllerCenter {
public AControllerCenter(CountDownLatch countDown) {
super(countDown, "AControllerCenter");
}
@Override
protected void check() {
System.out.println("is check [" + "A" + "] now");
try {
Thread.sleep(2000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("is check [" + "A" + "] success");
}
}
public class BControllerCenter extends ControllerCenter {
public BControllerCenter(CountDownLatch countDown) {
super(countDown, "BControllerCenter");
}
@Override
protected void check() {
System.out.println("is check [" + "B" + "] now");
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("is check [" + "B" + "] success");
}
}
public class CheckSuccessTest {
private static List<ControllerCenter> controllerCenterList;
private static CountDownLatch countDown;
public CheckSuccessTest() {
}
public static boolean checkAll() throws Exception {
countDown = new CountDownLatch(2);
controllerCenterList = new ArrayList<>();
controllerCenterList.add(new AControllerCenter(countDown));
controllerCenterList.add(new BControllerCenter(countDown));
Executor pool = Executors.newFixedThreadPool(2);
for (ControllerCenter key : controllerCenterList) {
pool.execute(key);
}
countDown.await();
for (ControllerCenter key : controllerCenterList) {
if (!key.isResult()) {
return false;
}
}
return true;
}
public static void main(String[] args) throws Exception {
System.out.println("All Controller result is = [" + CheckSuccessTest.checkAll() + "]");
}
}