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();}}}
阅读全文
0 0
- CountDownLatch的使用方法
- CountDownLatch的使用方法
- CountDownLatch的使用方法
- CountDownLatch的使用方法和应用场景分析
- java多线程组件一:CountDownLatch使用方法的总结
- CountDownLatch 的使用
- Java的CountDownLatch
- CountDownLatch 的理解
- CountDownLatch的使用
- countdownlatch的用法
- CountDownLatch的用法
- JAVA的CountDownLatch
- Android CountDownLatch的使用
- CountDownLatch的原理
- CountDownLatch的用法
- CountDownLatch源码的理解
- CountDownLatch的使用
- CountDownLatch的使用
- 不可思议的OOM
- PLSQL在xshell中命令总结
- Mybatis 避免Sql注入
- 【机器学习】支持向量机SVM原理及推导
- Linux(Centos)之安装Nginx及注意事项
- CountDownLatch的使用方法
- 基础知识总结:接口与抽象类
- JAVA实践-maven项目中出现error pages红叉
- Android事件分发笔记
- java api1.6中文版
- lasso算法及其实现
- LDA 详解
- idea 运行起来maven工程-多个module
- 什么是*args和**kwargs