多线程使用Java在循环内并行执行该方法
我有如下代码。在循环中,它正在执行方法“process”。它是按顺序运行的。我想并行运行这个方法,但它应该在循环中完成,这样我就可以在下一行求和了。i、 即使是并行运行,所有函数都应该在第二个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;
}
# 1 楼答案
基本上,您需要使用自Java1.5以来就存在的Executors和Futures(参见Java Documentation)
在下面的示例中,我创建了一个主类,它使用另一个助手类,该类的行为类似于要并行化的处理器
主类分为3个步骤:
出于说教的原因,我放了一些日志,更重要的是,我在每个流程的业务逻辑中放了一个随机等待时间,模拟流程类运行的耗时算法
每个进程的最大等待时间为2秒,这也是步骤2的最高等待时间,即使您增加了并行任务的数量(只需尝试更改以下代码的变量
totalTasks
即可对其进行测试)以下是主要课程:
下面是流程类:
希望这有帮助
# 2 楼答案
下面的例子可能会对你有所帮助。我使用了fork/join框架来实现这一点
对于像您的示例这样的小数组大小,传统方法可能会更快,我怀疑fork/join方法会花费稍长的时间。但对于更大的规模或流程,fork/join框架是合适的。甚至Java8并行流也使用fork/join框架作为底层基础
你们班的学生会喜欢下面这个