ForkJoinPool demo
时间: 2023-12-19 18:58:19 浏览: 68
ForkJoinPool是Java中的一个并发工具,用于实现任务的分解和合并,以充分利用多核处理器的性能。下面是一个简单的ForkJoinPool的示例代码:
```java
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveTask;
public class ForkJoinPoolDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ForkJoinPool pool = new ForkJoinPool();
int sum = pool.invoke(new SumTask(arr, 0, arr.length - 1));
System.out.println("Sum: " + sum);
}
static class SumTask extends RecursiveTask<Integer> {
private static final int THRESHOLD = 2;
private int[] arr;
private int start;
private int end;
public SumTask(int[] arr, int start, int end) {
this.arr = arr;
this.start = start;
this.end = end;
}
@Override
protected Integer compute() {
if (end - start <= THRESHOLD) {
int sum = 0;
for (int i = start; i <= end; i++) {
sum += arr[i];
}
return sum;
} else {
int mid = (start + end) / 2;
SumTask left = new SumTask(arr, start, mid);
SumTask right = new SumTask(arr, mid + 1, end);
left.fork();
right.fork();
return left.join() + right.join();
}
}
}
}
```
在这个示例中,我们定义了一个SumTask类,它继承自RecursiveTask,这个类的作用是计算数组中的元素之和。如果数组的长度小于等于阈值(这里是2),那么直接计算和并返回。否则,将数组分成两部分,分别创建新的SumTask对象,并将它们放入线程池中计算。最后将两个结果相加并返回。在main方法中,我们创建了一个ForkJoinPool对象,并将SumTask对象放入线程池中计算。最后输出结果。
阅读全文