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
厚德载物
批发价可低至3块钱