如何等待java线程池中所有任务完成
2014-05-05 12:21
253 查看
一、等待线程池所有线程完成:
有时候我们需要等待java thread pool中所有任务完成后再做某些操作,如想要等待所有任务完成,仅需调用threadPool.awaitTermination()方法即可,请查看如下代码:
二、等待线程池指定线程完成:
如果我们仅仅想等待某些线程完成,我们可以利用Future,调用future.get()可以阻塞主线程等待子线程完成。通过把调用每个线程的Future放入Map或List中,然后遍历需要等待完成线程的Future,调用future.get() 方法:
有时候我们需要等待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<String, Future<?>> jobFutureMap=new HashMap<String, Future<?>>(); 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线程池中所有任务完成
- 主线程等待线程池所有任务完成
- Canvas如何等待所有图片加载完成才开始绘图
- golang中如何阻塞等待所有goroutines都完成
- GCD多线程之多任务并发等待所有任务完成
- 多线程应用 任务执行 等待所有任务完成一起处理
- iOS 如何巧妙解决“一个任务需要等待另外一个任务完成后才可以执行”的问题
- 主线程等待线程池所有任务完成
- Java主线程等待线程池所有任务完成--线程池的封装
- 等待所有或任意异步任务完成,以及异步任务完成时的处理方案
- 多个线程的同步(所有任务都完成之后再向下执行)--转
- 如何创建XS Job来完成定时任务
- 聊聊如何完成领导安排的那些任务
- vb.net如何判断shell完成,或者等待shell完成
- 如何等待一个线程完成后才继续执行之后的操作
- 克洛伊BagsHermes凯莉包小贴士如何发现音乐制作所有任务
- 限时等待某一任务完成示例
- Java 如何判断线程池所有任务是否执行完毕
- js中如何控制所有页面加载完成后,再执行某些方法
- [软件工程]提前完成任务的风险如何定义