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

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

4.创建用来生成文档所需要的对象:String矩阵,和用来生成随机数的Random对象。

int counter=0;

String document[][]=new String[numLines][numWords];

Random random=new Random();

5.为字符串矩阵填上字符串。通过随机数取得数组words中的某一字符串,然后存入到字符串矩阵document对应的位置上,同时计算生成的字符串矩阵中将要查找的词出现的次数。这个值可以用来与后续程序运行查找任务时统计的次数相比较,检查两个值是否相同。

for (int i=0; i<numLines; i++){

    for (int j=0; j<numWords; j++) {

        int index=random.nextInt(words.length);

        document[i][j]=words[index];

        if (document[i][j].equals(word)){

            counter++;

        }

    }

}

6.在控制台输出这个词出现的次数,并返回生成的矩阵document。

System.out.println("DocumentMock: The word appears "+

counter+" times in the document");

return document;

7.创建名为DocumentTask的类,并继承RecursiveTask类,RecursiveTask类的泛型参数为Integer类型。这个DocumentTask类将实现一个任务,用来计算所要查找的词在行中出现的次数。

public class DocumentTask extends RecursiveTask<Integer> {

8.声明一个名为document的私有String矩阵,以及两个名为start和end的私有int属性,并声明一个名为word的私有String属性。

private String document[][];

private int start, end;

private String word;

9.实现类的构造器,用来初始化类的所有属性。

public DocumentTask (String document[][], int start, int end,

    String word){

    this.document=document;

    this.start=start;

    this.end=end;

    this.word=word;

}

10.实现compute()方法。如果end和start的差异小于10,则调用processLines()方法,来计算这两个位置之间要查找的词出现的次数。

@Override

protected Integer compute() {

    int result;

    if (end-start<10){

    result=processLines(document, start, end, word);

11.否则,拆分这些行成为两个对象,并创建两个新的DocumentTask对象来处理这两个对象,然后调用invokeAll()方法程池里执行它们。

} else {

    int mid=(start+end)/2;

    DocumentTask task1=new DocumentTask(document,start,mid,word);

    DocumentTask task2=new DocumentTask(document,mid,end,word);

    invokeAll(task1,task2);


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

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

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