java - Executorservice Check 全部任务完成
问题描述
我想在提交新一批任务之前检查所有执行器服务任务是否已完成,这是我的代码:
ExecutorService executorService = Executors.newFixedThreadPool(concurrency);
for(int i=0;i<batch;i++){
for(int j=0;j<concurrency;j++) {
executorService.submit(new DOTASK(0,loopTimes));
}
while(executorService != done){
// wait
}
System.out.println("Batch "+i+"Complete")
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.DAYS);
解决方案
CountDownLatch是您的选择
ExecutorService executorService = Executors.newFixedThreadPool(concurrency);
for(int i=0;i<batch;i++){
CountLatchDown latch = new CountDownLatch(concurrency);
for(int j=0;j<concurrency;j++) {
executorService.submit(new DOTASK(0,loopTimes));
}
//in each DOTASK thread invoke latch.countDown()
latch.await();
System.out.println("Batch "+i+"Complete")
}
executorService.shutdown();
executorService.awaitTermination(1, TimeUnit.DAYS);
推荐阅读
- laravel - ErrorException 尝试从不同的数据库表中搜索名称时尝试获取非对象的属性“名称”?
- r - 选定的输出元素未传递到 downloadHandler 中的 rmd 文档
- html - 如何使标题适合页面限制
- node.js - 无法使用 updateTabs API 更新文本选项卡值
- php - 如何在php文件内的特定行中插入文本?
- javascript - 带有 2 个示例的递归基础知识
- android - 我无法在 WhatsApp Private 文件夹和图库中查看 WhatsApp 媒体图像
- iphone - 视频无法在 iPhone 上播放
- android - Android TV 开发,如何配置我自己的应用程序以添加到此列表中
- python - 如何将画布的(行,列)位置的边界框作为网格元组返回