
fork/join 框架是 java.util.concurrent 包的一部分,在 java 7 中引入。它是为可以递归地划分为更小的块的任务而设计的,其中每个块都可以被处理独立。该框架遵循分而治之的原则,非常适合排序、搜索和其他递归算法等任务。
forkjointask 是可以在 fork/join 框架中运行的任务的基类。它提供了核心操作,允许任务派生新的子任务并在完成后加入它们。
示例:
import java.util.concurrent.recursivetask;
public class sumtask extends recursivetask<integer> {
private final int[] arr;
private final int start, 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 <= 10) {
int sum = 0;
for (int i = start; i < end; i++) {
sum += arr[i];
}
return sum;
} else {
int mid = (start + end) / 2;
sumtask lefttask = new sumtask(arr, start, mid);
sumtask righttask = new sumtask(arr, mid, end);
lefttask.fork();
int rightresult = righttask.compute();
int leftresult = lefttask.join();
return leftresult + rightresult;
}
}
}
forkjoinpool 是管理工作线程池以执行 forkjointask 实例的中心类。它使用工作窃取算法,通过将任务从繁忙线程重新分配到空闲线程来保持所有线程繁忙。
示例:
import java.util.concurrent.forkjoinpool;
public class forkjoinexample {
public static void main(string[] args) {
int[] arr = new int[100];
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
forkjoinpool pool = new forkjoinpool();
sumtask task = new sumtask(arr, 0, arr.length);
int result = pool.invoke(task);
system.out.println("sum: " + result);
}
}
recursivetask 在任务返回结果时使用,而 recursiveaction 在任务不返回任何结果时使用。
立即学习“Java免费学习笔记(深入)”;
本文档主要讲述的是用Apache Spark进行大数据处理——第一部分:入门介绍;Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。最初在2009年由加州大学伯克利分校的AMPLab开发,并于2010年成为Apache的开源项目之一。 在这个Apache Spark文章系列的第一部分中,我们将了解到什么是Spark,它与典型的MapReduce解决方案的比较以及它如何为大数据处理提供了一套完整的工具。希望本文档会给有需要的朋友带来帮助;感
0
使用 recursiveaction 的示例:
import java.util.concurrent.recursiveaction;
public class printtask extends recursiveaction {
private final int[] arr;
private final int start, end;
public printtask(int[] arr, int start, int end) {
this.arr = arr;
this.start = start;
this.end = end;
}
@override
protected void compute() {
if (end - start <= 10) {
for (int i = start; i < end; i++) {
system.out.print(arr[i] + " ");
}
system.out.println();
} else {
int mid = (start + end) / 2;
printtask lefttask = new printtask(arr, start, mid);
printtask righttask = new printtask(arr, mid, end);
invokeall(lefttask, righttask);
}
}
}
运行forkjoinexample将输出数组元素的总和。 fork/join 框架将任务划分为更小的块并并行处理它们,显示出显着的性能改进,尤其是对于大型数据集。
例如,将 1 到 100 之间的数字相加:
sum: 5050
对于 printtask ,框架划分数组打印任务,并行执行并同时输出片段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
fork/join 框架是 java 中用于优化并行处理任务的强大工具。它擅长将任务分解为更小的子任务,独立执行,然后组合以产生最终结果的场景。虽然它带来了复杂性,但多核环境中的性能优势通常大于其缺点,使其成为解决 cpu 限制和大型递归问题的绝佳选择。
阅读更多帖子:什么是 java 中的 fork/join 框架?
以上就是Java 中的 Fork/Join 框架是什么?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号