Java通过Fork/Join优化并行计算

时间:2021-05-20

本文实例为大家分享了Java通过Fork/Join优化并行计算的具体代码,供大家参考,具体内容如下

Java代码:

package Threads;import java.util.concurrent.ForkJoinPool;import java.util.concurrent.RecursiveAction;/** * Created by Frank */public class RecursiveActionDemo extends RecursiveAction { static int[] raw = {19, 3, 0, -1, 57, 24, 65, Integer.MAX_VALUE, 42, 0, 3, 5}; static int[] sorted = null; int[] source; int[] dest; int length; int start; final static int THRESHOLD = 4; public static void main(String[] args) { sorted = new int[raw.length]; ForkJoinPool pool = new ForkJoinPool(); pool.invoke(new RecursiveActionDemo(raw, 0, raw.length, sorted)); System.out.println('['); for (int i : sorted) { System.out.println(i + ","); } System.out.println(']'); } public RecursiveActionDemo(int[] source, int start, int length, int[] dest) { this.source = source; this.dest = dest; this.length = length; this.start = start; } @Override protected void compute() { System.out.println("ForkJoinDemo.compute()"); if (length < THRESHOLD) { // 直接计算 for (int i = start; i < start + length; i++) { dest[i] = source[i] * source[i]; } } else { // 分而治之 int split = length / 2; /** * invokeAll反复调用fork和join直到完成。 */ invokeAll(new RecursiveActionDemo(source, start, split, dest), new RecursiveActionDemo(source, start + split, length - split, dest)); } }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章