35-在执行器内分离任务的启动并处理返回结果
4.10 在执行器内分离任务的启动并处理返回结果
正常而言,当使用执行器执行并发任务时,可以提交 Runnable
或是 Callable
任务到执行器,并获取 Future
实例对象来控制任务的执行。但是有可能遇到如下场景:当提交任务给执行器时,使用一个对象来提交,并想在另一个对象中处理返回结果。对于这种情况,Java并发API提供了 CompletionService
类。
CompletionService
类提供了一个方法可提交任务给执行器,并用另一个方法来获取下一个已执行完毕的 Future
实例对象。在内部,它用一个 Executor
对象来提交任务。这种行为的优势是共享一个 CompletionService
对象并将任务发送给执行者,以便其他对象可以处理结果。它的限制性在于,第二个对象只能获取那些执行完毕对象的 Future
对象,因此这些 Future
对象只能用来获取任务执行结果。
本节将介绍如何使用 CompletionService
类来分离执行器中任务的启动和执行返回结果。