fork/join框架_java forkjoinpool_fork join框架(6)

电脑杂谈  发布时间:2017-04-10 18:05:20  来源:网络整理

ForkJoinTask类也包含了在范例中所使用的invokeAll()方法的其他版本,这些版本如下。

invokeAll(ForkJoinTask< ? >… tasks):这个版本的方法接收一个可变的参数列表,可以传递尽可能多的ForkJoinTask对象给这个方法作为参数。

invokeAll(Collectiontasks):这个版本的方法接受一个泛型类型T的对象集合(比如,ArrayList对象、LinkedList对象或者TreeSet对象)。这个泛型类型T必须是ForkJoinTask类或者它的子类。

虽然ForkJoinPool类是设计用来执行ForkJoinTask对象的,但也可以直接用来执行Runnable和Callable对象。当然,也可以使用ForkJoinTask类的adapt()方法来接收一个Callable对象或者一个Runnable对象,然后将之转化为一个ForkJoinTask对象,然后再去执行。

Fork/Join框架提供了执行任务并返回结果的能力。这些类型的任务都是通过RecursiveTask类来实现的。RecursiveTask类继承了ForkJoinTask类,并且实现了由执行器框架(Executor Framework)提供的Future接口。

在任务中,必须使用Java API文档推荐的如下结构:

if (problem size > size){

    tasks=Divide(task);

    execute(tasks);

    groupResults()

    return result;

} else {

    resolve problem;

    return result;

}

如果任务需要解决的问题大于预先定义的大小,那么就要将这个问题拆分成多个子任务,并使用Fork/Join框架来执行这些子任务。执行完成后,原始任务获取到由所有这些子任务产生的结果,合并这些结果,返回最终的结果。当原始任务程池中执行结束后,将高效地获取到整个问题的最终结果。

在本节,我们将学习如何使用Fork/Join框架来解决这种问题,开发一个应用程序,在文档中查找一个词。我们将实现以下两种任务:

一个文档任务,它将遍历文档中的每一行来查找这个词;

一个行任务,它将在文档的一部分当中查找这个词。

所有这些任务将返回文档或行中所出现这个词的次数。

本节的范例是在EclipseIDE里完成的。无论你使用Eclipse还是其他的IDE(比如NetBeans),都可以打开这个IDE并且创建一个新的Java工程。

按照接下来的步骤实现本节的范例。

1.创建一个名为DocumentMock的类。它将生成一个字符串矩阵来模拟一个文档。

public class Document {

2.用一些词来创建一个字符串数组。这个数组将被用来生成字符串矩阵。

private String words[]={"the","hello","goodbye","packt", "java","t

hread","pool","random","class","main"};

3.实现generateDocument()方法。它接收3个参数,分别是行数numLines,每一行词的个数numWords,和准备查找的词word。然后返回一个字符串矩阵。

public String[][] generateDocument(int numLines, int numWords,

String word){


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40557-6.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 姬友
      姬友

      人家的确是在公海航行

    热点图片
    拼命载入中...