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 对象作为参数来初始化。