我有如下代码。在一个循环中,它正在执行方法“process”。它是顺序运行的。我想并行运行此方法,但它应该在循环内完成,以便我可以在下一行求和。即即使它并行运行,所有函数也应该在第二个 for 循环执行之前完成。
Jdk1.7 不是JDK1.8 版本如何解决?
public static void main(String s[]){
int arrlen = 10;
int arr[] = new int[arrlen] ;
int t =0;
for(int i=0;i<arrlen;i++){
arr[i] = i;
t = process(arr[i]);
arr[i] = t;
}
int sum =0;
for(int i=0;i<arrlen;i++){
sum += arr[i];
}
System.out.println(sum);
}
public static int process(int arr){
return arr*2;
}
最佳答案
以下示例可能对您有所帮助。我已经使用 fork/join 框架来做到这一点。
对于像您的示例这样的小数组,传统方法可能会更快,我怀疑 fork/join 方式会花费稍长的时间。但对于更大的规模或进程,fork/join 框架是合适的。甚至 Java 8 并行流也使用 fork/join 框架作为底层基础。
public class ForkMultiplier extends RecursiveAction {
int[] array;
int threshold = 3;
int start;
int end;
public ForkMultiplier(int[] array,int start, int end) {
this.array = array;
this.start = start;
this.end = end;
}
protected void compute() {
if (end - start < threshold) {
computeDirectly();
} else {
int middle = (end + start) / 2;
ForkMultiplier f1= new ForkMultiplier(array, start, middle);
ForkMultiplier f2= new ForkMultiplier(array, middle, end);
invokeAll(f1, f2);
}
}
protected void computeDirectly() {
for (int i = start; i < end; i++) {
array[i] = array[i] * 2;
}
}
}
你的主类会喜欢下面这个
public static void main(String s[]){
int arrlen = 10;
int arr[] = new int[arrlen] ;
for(int i=0;i<arrlen;i++){
arr[i] = i;
}
ForkJoinPool pool = new ForkJoinPool();
pool.invoke(new ForkMultiplier(arr, 0, arr.length));
int sum =0;
for(int i=0;i<arrlen;i++){
sum += arr[i];
}
System.out.println(sum);
}
关于java - 使用Java在循环内并行执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47452874/