当前位置:嗨网首页>书籍在线阅读

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