0
点赞
收藏
分享

微信扫一扫

CountDownLatch的使用方法

左小米z 2023-02-19 阅读 119


使用场景:

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