从ThreadPoolExecutor的invokeAll方法说开去:如何等待多个并发任务结束并收集结果

ThreadPoolExecutor的invokeAny方法会返回第一个完成的任务的结果,与之对应的是invokeAll方法,返回的是所有任务的执行结果。主线程会阻塞,一直到所有任务都执行完毕。 我们总结下,想要等待所有任务都完成并且开始处理结果到底有几种办法。

继续阅读“从ThreadPoolExecutor的invokeAll方法说开去:如何等待多个并发任务结束并收集结果”

认识ExecutorCompletionService返回最快的结果

场景: 我们用多线程来做一次搜索,一共有5个搜索引擎可用,我们运行多线程程序,哪个搜索引擎最先返回搜索结果就用哪个结果,剩余的4个结果已经不重要了,可以放弃了。这种场景可用ThreadPoolExecutor.invokeAny方法。
继续阅读“认识ExecutorCompletionService返回最快的结果”