一、等待线程池所有线程完成:

有时候我们需要等待java thread pool中所有任务完成后再做某些操作,如想要等待所有任务完成,仅需调用threadPool.awaitTermination()方法即可,请查看如下代码:

ExecutorService threadPool = Executors.newFixedThreadPool(ConfigUtil.ACCESSDB_THREAD_POOL_SIZE);

for(String key:noneExsitKeys){

ConcurrentAccessDBJob job = new ConcurrentAccessDBJob(key,userLevel,dao,service);

threadPool.submit(job);

}

threadPool.shutdown();

try {//等待直到所有任务完成

threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MINUTES);

} catch (InterruptedException e) {

e.printStackTrace();

}

二、等待线程池指定线程完成:

如果我们仅仅想等待某些线程完成,我们可以利用Future,调用future.get()可以阻塞主线程等待子线程完成。通过把调用每个线程的Future放入Map或List中,然后遍历需要等待完成线程的Future,调用future.get() 方法:

Map> jobFutureMap=new HashMap>();

for(String key:noneExsitKeys){

ConcurrentAccessDBJob job = new ConcurrentAccessDBJob(key,userLevel, dao, service);

Future> future = threadPool.submit(job);

jobFutureMap.put(key, future);

}

for(String key:noneExsitKeys){

Future> future =jobFutureMap.get(key);

future.get();//调用此方法会使主线程等待子线程完成

System.out.println("---future.idDone()"+future.isDone());

}

java 等待线程池结束_如何等待java线程池中所有任务完成相关推荐

  1. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  2. java 等待线程池结束_等待线程池中任务执行完毕做优雅关闭

    背景 在Java开发中,如果涉及多线程,会经常使用到线程池,本期不额外讲述线程池本身相关的东西.考虑一种场景,如果我们提交给线程池的任务都相对比较耗时,而在任务启动运行后,如果后续有需求的变更,要重新 ...

  3. java 线程执行结束_Java_如何等待子线程执行结束

    本程序的数据有可能是如下: main thread work start sub thread start working. main thread work done. now waiting su ...

  4. executor线程池框架_如何使用Java 5 Executor框架创建线程池

    executor线程池框架 Java 5以Executor框架的形式在Java中引入了线程池,它允许Java程序员将任务提交与任务执行分离. 如果要使用Java进行服务器端编程,则线程池是维护系统可伸 ...

  5. java如何写线程外部类_廖雪峰Java读书笔记(六)--多线程(或称并发)

    1. 多线程基础 首先要明白一些概念: 进程:把一个任务称为一个进程,浏览器就是一个进程,视频播放器是另一个进程,类似的,音乐播放器和Word都是进程. 线程:某些进程内部还需要同时执行多个子任务.例 ...

  6. java三个线程 顺序执行_如何确保三个线程顺序执行

    三个线程t1.t2.t3.确保三个线程,t1执行完后t2执行,t2执行完后t3执行. 一.使用join thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程. ...

  7. 池流程图_干货收藏 | Java程序员必备的一些流程图

    前言: 整理了一些Java基础流程图/架构图,做一下笔记,大家一起学习. 1.spring的生命周期 Spring作为当前Java最流行.最强大的轻量级容器框架,了解熟悉spring的生命周期非常有必 ...

  8. java高并发编程艺术_[高并发]Java高并发编程系列开山篇--线程实现

    Java是最早开始有并发的语言之一,再过去传统多任务的模式下,人们发现很难解决一些更为复杂的问题,这个时候我们就有了并发. 引用 多线程比多任务更加有挑战.多线程是在同一个程序内部并行执行,因此会对相 ...

  9. java线程怎么重启_如何在Java中启动/停止/重启线程?

    10 个答案: 答案 0 :(得分:41) 一旦线程停止,您就无法重新启动它.但是,没有什么可以阻止您创建和启动新线程. 选项1:创建一个新线程,而不是尝试重新启动. 选项2:而不是让线程停止,让它等 ...

最新文章

  1. OpenAI 研究员最新博客:如何在多GPU上训练真正的大模型?
  2. 七、【SAP-PM模块】信息系统 报表分析
  3. matlab radsimp,[转载]MATLAB学习笔记(八)
  4. 零基础 Amazon Web Services (AWS) 入门教程图文版(一)
  5. 记一次node+react项目发布过程(一)--webpack生产环境打包优化
  6. resin端口错误问题
  7. 演示:思科交换机的Telnet管理与SSH管理
  8. jmeter.bat双击闪退问题
  9. java将数据写入csv文件,从csv文件中读取数据
  10. windows10应用商店加速方法
  11. Mysql最常用的十大函数
  12. C#中使用listview的checkBoxs全选和取消全选
  13. 80004005错误代码_0x80004005,教您0x80004005错误代码解决方法
  14. 浅谈游戏《底特律:变人》
  15. 二维码在线生成接口API
  16. 工程建设项目综合信息管理系统
  17. 数据可视化大屏 - 大屏云极简使用手册
  18. 《操作系统》第十二章习题加解析(重点学习内容)
  19. 红透半边天的VR(虚拟现实)产业
  20. cad缩放_这个CAD缩放技巧太实用!

热门文章

  1. FCOS论文复现:通用物体检测算法
  2. 租用服务器一年价格_服务器租用一年多少钱
  3. 为什么qq没有位置服务器,腾讯QQ内测扩列功能上线 2019QQ扩列为什么找不到
  4. 实用形ps切图技巧,图片格式及其相关
  5. 股神巴菲特给股市新手的8条投资忠告
  6. 2022浙江网络安全大赛
  7. 钓友海上遇险 山东海警连夜搜救
  8. Facebook授权登录获取应用编号和应用密钥及配置
  9. 使用Hexo建立个人博客
  10. )用计算机解决问题的基本过程是(,计算机解决问题基本过程 答案.doc