public class CountTask extends RecursiveTask<Integer> {
private static final int THRESHHOLD = 2;
private int start;
private int end;
public CountTask(int start, int end) {
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
System.out.println(start + " - " + end + " begin");
int sum = 0;
boolean canCompute = (end - start) <= THRESHHOLD;
if (canCompute) { // 达到了计算条件,则直接执行
System.out.println(start + " - " + end + " canCompute");
for (int i = start; i <= end; i++) {
sum += i;
}
} else { // 不满足计算条件,则分割任务
int middle = (start + end) / 2;
CountTask leftTask = new CountTask(start, middle);
CountTask rightTask = new CountTask(middle + 1, end);
leftTask.fork(); // 执行子任务
rightTask.fork(); // 执行子任务
int leftResult = leftTask.join(); // 等待子任务执行完毕
int rightResult = rightTask.join(); // 等待子任务执行完毕
sum = leftResult + rightResult; // 合并子任务的计算结果
}
System.out.println(start + " - " + end + " end");
return sum;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
ForkJoinPool pool = new ForkJoinPool();
CountTask task = new CountTask(1, 8);
Future<Integer> future = pool.submit(task);
if (task.isCompletedAbnormally()) {
System.out.println(task.getException());
} else {
System.out.println("result: " + future.get());
}
pool.shutdown();
}
}public class FileSearchTask extends RecursiveAction {
private final File directory;
public FileSearchTask(File directory) {
this.directory = directory;
}
@Override
protected void compute() {
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
// 如果是目录,创建子任务
FileSearchTask task = new FileSearchTask(file);
task.fork();
} else {
// 处理文件
System.out.println(file.getAbsolutePath());
}
}
// 等待所有子任务完成
invokeAll();
}
}
public static void main(String[] args) {
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(new FileSearchTask(new File("F:\\常用软件"))); //执行任务并等待结果
pool.shutdown();
}
}原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。