首页 / JAVA / 使用Java在循环内并行执行方法
使用Java在循环内并行执行方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Java在循环内并行执行方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1646字,纯文字阅读大概需要3分钟。
内容图文
![使用Java在循环内并行执行方法](/upload/InfoBanner/zyjiaocheng/668/7470dbc92cfc417eacb0103c6f512052.jpg)
我有下面的代码.在一个循环中,它正在执行方法“ 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在循环内并行执行方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。