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

09-结果分析

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

结果分析

本案例实现了如下两个任务。

  • DocumentTask :该类根据 startend 属性处理了对应文档中的行集合。如果行数小于 10 ,则对每行创建 LineTask 对象,当任务执行完毕后,汇总运行结果并返回。如果任务对应的行集合大于等于 10 ,则将集合分割为两个子集,并创建两个 DocumentTask 对象来处理这些新集合。当这些任务执行完毕后,汇总子任务的结果并返回。
  • LineTask :该类处理文档中一行的单词。如果单词个数小于100,则任务直接在单词集合中搜索单词并返回单词的出现次数;否则,将单词集合分割成两个子集并创建两个 LineTask 对象来处理这些集合。当这些任务执行完毕后,汇总子任务的结果并返回。
  • Main 类中,我们在 DocumentTask 类中执行默认的 ForkJoinPool (调用静态方法 commonPool() 来获取),该 DocumentTask 类处理每行1000个单词共 100 行的文档。该任务会使用其他的 DocumentTask 对象和 LineTask 对象分割任务,以便这些任务执行完毕后,可以使用初始任务来获取整个文档中单词出现的次数。
  • 为了让任务返回执行结果,这些任务继承了 RecursiveTask 类。调用 get() 方法可获取任务的返回值,该方法在 Future 接口中声明,在 RecursiveTask 类中实现。
  • 运行程序时,你可以对比控制台输出的第一行和最后一行。第一行是文档生成时统计的单词出现次数,最后一行是fork/join任务统计的单词出现次数。