本文主要是介绍如何等待java线程池中所有任务完成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、等待线程池所有线程完成:
有时候我们需要等待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线程池中所有任务完成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!