CountDownLatch简单用法
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() + "]"); } }