一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
用给定的计数初始化 CountDownLatch
。由于调用了 countDown()
方法,所以在当前计数到达零之前,await
方法会一直受阻塞。之后,会释放所有等待的线程,await
的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。
public class Main {
protected static ExecutorService scheduler = Executors.newFixedThreadPool(5);
public static CountDownLatch countDownLatch;//定义一个静态的CountDownLatch
public static void main(String[] args) {
countDownLatch = new CountDownLatch(5); //初始化容量,
int threadNum = taskNum>8?8:taskNum; //创建八个线程,和cpu数目相等
for(int i=0;i
public class MultiThread implements Runnable {
public void run() {
logger.info(" starting...");
try {
//do what you wanna do
} catch (Exception e) {
logger.error("", e);
}finally{
logger.info("countDown");
AppDependenciesMain.countDownLatch.countDown();//线程运行结束后,把countDownLatch数目减1
}
}
}
以上内容可保证在所有子进程都执行结束之后,主进程正常退出。