CountDownLatch的使用方法

来源:互联网 发布:淘宝付款显示系统繁忙 编辑:程序博客网 时间:2024/06/10 13:26

使用场景:

系统启动时,需要校验网络、数据库、中间件等各种依赖环境,此时,可用CountDownLatch来做处理


BaseCheck:

package com.mhm.countdownLatch3;import java.util.concurrent.CountDownLatch;public abstract class BaseCheck implements Runnable {private String serverName;private CountDownLatch countDownLatch;private boolean flag;public BaseCheck(String serverName, CountDownLatch countDownLatch) {this.serverName = serverName;this.countDownLatch = countDownLatch;}@Overridepublic void run() {try {System.out.println(serverName + "开始");flag = docheck();if (flag) {System.out.println(serverName + "IS UP");} else {System.out.println(serverName + "IS DOWN");}} catch (Exception ex) {flag = false;ex.printStackTrace();} finally {countDownLatch.countDown();}}public boolean isFlag() {return flag;}protected abstract boolean docheck();}

NetworkCheck:

package com.mhm.countdownLatch3;import java.util.concurrent.CountDownLatch;public abstract class BaseCheck implements Runnable {private String serverName;private CountDownLatch countDownLatch;private boolean flag;public BaseCheck(String serverName, CountDownLatch countDownLatch) {this.serverName = serverName;this.countDownLatch = countDownLatch;}@Overridepublic void run() {try {System.out.println(serverName + "开始");flag = docheck();if (flag) {System.out.println(serverName + "IS UP");} else {System.out.println(serverName + "IS DOWN");}} catch (Exception ex) {flag = false;ex.printStackTrace();} finally {countDownLatch.countDown();}}public boolean isFlag() {return flag;}protected abstract boolean docheck();}

DatabaseCheck:

package com.mhm.countdownLatch3;import java.util.concurrent.CountDownLatch;public class DatabaseCheck extends BaseCheck {public DatabaseCheck(String serverName, CountDownLatch countDownLatch) {super(serverName, countDownLatch);}@Overrideprotected boolean docheck() {try {Thread.sleep(8000);return true;} catch (InterruptedException e) {e.printStackTrace();return false;}}}



App3StartupUtils:

package com.mhm.countdownLatch3;import java.util.ArrayList;import java.util.List;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class App3StartupUtils {private static List<BaseCheck> checkList;private static CountDownLatch countDownLatch;private static App3StartupUtils single = new App3StartupUtils();          public static App3StartupUtils getInstance() {          return App3StartupUtils.single;    }        public boolean checkService() throws InterruptedException {    checkList = new ArrayList<BaseCheck>();    countDownLatch = new CountDownLatch(2);        checkList.add(new NetworkCheck("网络校验", countDownLatch));    checkList.add(new DatabaseCheck("数据库校验", countDownLatch));        ExecutorService pool = Executors.newFixedThreadPool(checkList.size());        for (BaseCheck e : checkList) {    pool.execute(e);}    countDownLatch.await();for (BaseCheck e : checkList) {    if(e.isFlag()) {    } else {    return false;    }}pool.shutdown();return true;            }    }


Main3:

package com.mhm.countdownLatch3;public class Main3 {public static void main(String[] args) {try {boolean flag = App3StartupUtils.getInstance().checkService();System.out.println("启动:" + flag);} catch (InterruptedException e) {e.printStackTrace();}}}



原创粉丝点击