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

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

20.在循环体中,将任务休眠1秒钟。

    try {

        TimeUnit.SECONDS.sleep(1);

    } catch (InterruptedException e) {

        e.printStackTrace();

    }

}

21.返回-1表示没有找到元素。

    return NOT_FOUND;

}

22.实现launchTasks()方法。将这个任务要处理的元素块拆分成两部分,然后创建两个Task对象来处理它们。

private int launchTasks() {

    int mid=(start+end)/2;

    Task task1=new Task(array,start,mid,number,manager);

    Task task2=new Task(array,mid,end,number,manager);

23.增加任务到TaskManager对象中。

manager.addTask(task1);

manager.addTask(task2);

24.调用fork()方法采用异步方式执行这两个任务。

task1.fork();

task2.fork();

25.等待任务结束,如果第一个任务返回的结果不为-1,则返回第一个任务的结果;否则返回第二个任务的结果。

int returnValue;

returnValue=task1.join();

if (returnValue!=-1) {

    return returnValue;

}

returnValue=task2.join();

return returnValue;

26.实现writeCancelMessage()方法,在控制台输入信息表示任务已经取消了。

public void writeCancelMessage(){

    System.out.printf("Task: Cancelled task from %d to %d",start,end);

}

27.实现范例的主类,创建Main主类,并实现main()方法。

public class Main {

    public static void main(String[] args) {

28.用ArrayGenerator类创建一个容量为1,000的数字数组。

ArrayGenerator generator=new ArrayGenerator();

int array[]=generator.generateArray(1000);

29.创建一个TaskManager对象。

TaskManager manager=new TaskManager();

30.通过默认的构造器创建一个ForkJoinPool对象。

ForkJoinPool pool=new ForkJoinPool();

31.创建一个Task对象用来处理第28步生成的数组。

Task task=new Task (array,0,1000,5,manager);

32.调用execute()方法采用异步方式执行线程池中的任务。

pool.execute(task);

33.调用shutdown()方法关闭线程池。

pool.shutdown();

34.调用ForkJoinPool类的awaitTermination()方法等待任务执行结束。

try {

    pool.awaitTermination(1, TimeUnit.DAYS);

} catch (InterruptedException e) {

    e.printStackTrace();

}


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

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

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