CountDownLatch的使用方法

使用场景:

系统启动时,需要校验网络、数据库、中间件等各种依赖环境,此时,可用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;
	}
	
	
	@Override
	public 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;
	}
	
	
	@Override
	public 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);
	}

	@Override
	protected 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值