37-结果分析
结果分析
本案例的 main
方法用 Executor
类的 newCachedThreadPool()
方法创建了 ThreadPoolExecutor
实例对象。随后用该 Executor
对象来初始化一个 Completion- Service
实例对象,因为 CompletionService
类用一个执行器来执行任务。在 ReportRequest
类中,则用 submit()
方法提交一个任务给 CompletionService
去执行。
当 CompletionService
执行完成一个任务时, service
变量在一个队列中存储 Future
对象,以监控任务的执行。 poll()
方法会访问队列并检查是否有任务执行完毕。如果有的话,则返回队列中的第一个元素,该元素是一个执行完毕的任务对应的 Future
对象。当 poll()
方法返回一个Future对象时,它会在队列中删除对应的 Future
对象。本案例在方法中传入两个变量来表示任务结束后的等待时间,这样可以防止存储执行完成后任务结果的队列是空的。
创建 CompletionService
对象后,可创建了两个 ReportRequest
对象来执行 ReportGenerator
任务。其中执行 ReportGenerator
任务的 ReportRequest
对象会使用之前创建的 CompletionService
对象作为参数来初始化。