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