代码描述在Java语言中,多线程中CountDownLatch的用法
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
用给定的计数初始化 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<taskNum;i++){
scheduler.execute(new MultiThread()); //启动多个线程
}
try {
countDownLatch.await(); //等待子线程全部执行结束(等待CountDownLatch计数变为0)
logger.info("main thread exit");
System.exit(0);//程序退出
} catch (InterruptedException e) {
System.exit(1);
e.printStackTrace();
}
}
}
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
}
}
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。