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

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

20.实现类的构造器,用来初始化它的属性。

public LineTask(String line[], int start, int end, String word)

{

    this.line=line;

    this.start=start;

    this.end=end;

    this.word=word;

}

21.实现compute()方法。如果end和start属性的差异小于100,那么任务将采用count()方法,在由start与end属性所决定的行的片断中查找词。

@Override

protected Integer compute() {

    Integer result=null;

    if (end-start<100) {

        result=count(line, start, end, word);

22.如果end和start属性的差异不小于100,将这一组词拆分成两组,然后创建两个新的LineTask对象来处理这两个组,调用invokeAll()方法程池中执行它们。

} else {

    int mid=(start+end)/2;

    LineTask task1=new LineTask(line, start, mid, word);

    LineTask task2=new LineTask(line, mid, end, word);

    invokeAll(task1, task2);

23.调用groupResults()方法将两个任务返回的值相加。最后返回任务计算的结果。

    try {

        result=groupResults(task1.get(),task2.get());

    } catch (InterruptedException | ExecutionException e) {

        e.printStackTrace();

    }

}

return result;

24.实现count()方法。它接收4个参数,一个完整行字符串line数组,start属性,end属性和任务将要查找的词word的属性。

private Integer count(String[] line, int start, int end, String

word) {

25.将存储在start和end属性值之间的词与任务正在查找的word属性相比较。如果相同,那么将计数器counter变量加1。

    int counter;

    counter=0;

    for (int i=start; i<end; i++){

        if (line[i].equals(word)){

        counter++;

    }

}

26.为了延缓范例的执行,将任务休眠10毫秒。

try {

    Thread.sleep(10);

} catch (InterruptedException e) {

    e.printStackTrace();

}

27.返回计数器counter变量的值。

return counter;

28.实现groupResults()方法。计算两个数字之和并返回结果。.

private Integer groupResults(Integer number1, Integer number2) {

    Integer result;

    result=number1+number2;

    return result;

}


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

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

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