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

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

7.实现SearchNumberTask类,并继承RecursiveTask类,RecursiveTask类的泛型参数为Integer类型。这个类将寻找在整数数组元素块中的一个数字。

public class SearchNumberTask extends RecursiveTask<Integer> {

8.声明一个名为array的私有int数组。

private int numbers[];
9.声明两个分别名为start和end的私有int属性。这两个属性将决定任务所要处理的数组的元素。
private int start, end;

10.声明一个名为number的私有int属性,用来存储将要寻找的数字。

private int number;

11.声明一个名为manager的私有TaskManager属性。利用这个对象来取消所有的任务。

private TaskManager manager;

12.声明一个int常量,并初始化其值为-1。当任务找不到数字时将返回这个常量。

private final static int NOT_FOUND=-1;

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

public Task (int numbers[], int start, int end, int number,

    TaskManager manager){

        this.numbers=numbers;

        this.start=start;

        this.end=end;

        this.number=number;

        this.manager=manager;

    }

14.实现compute()方法。在控制台输出信息表示任务开始,并输出start和end的属性值。

@Override

protected Integer compute() {

    System.out.println("Task: "+start+":"+end);

15.如果start和end属性值的差异大于10(任务必须处理大于10个元素的数组),那么,就调用launchTasks()方法将这个任务拆分为两个子任务。

int ret;

if (end-start>10) {

    ret=launchTasks();

16.否则,寻找在数组块中的数字,调用lookForNumber()方法处理这个任务。

} else {

    ret=lookForNumber();

}

17.返回任务的结果。

return ret;

18.实现lookForNumber()方法。

private int lookForNumber() {

19.遍历任务所要处理的数组块中的所有元素,将元素中存储的数字和将要寻找的数字进行比较。如果它们相等,就在控制台输出信息表示找到了,并用TaskManager对象的cancelTasks()方法取消所有的任务,然后返回已找到的这个元素所在的位置。

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

    if (numbers[i]==number) {

        System.out.printf("Task: Number %d found in position %d\n",number,i);

        manager.cancelTasks(this);

        return i;

    }


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

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

    • 周釐王
      周釐王

      第三次世界大战不是梦啊

    • 今天的年班
      今天的年班

      这种被动的方式有其客观背景

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