可能重复:
Java 的“Parallel.For”?
.NET 有 Parallel.For,它允许您并行运行 for 循环,而无需直接使用线程。
Java中有类似的东西吗?我发现了完全相同的问题(Here),但是在最新版本的 java 出现之前就有人问了,它声称有:
“JSR 166 下的并发实用程序”
那么,他们放了什么东西吗?
可能重复:
Java 的“Parallel.For”?
.NET 有 Parallel.For,它允许您并行运行 for 循环,而无需直接使用线程。
Java中有类似的东西吗?我发现了完全相同的问题(Here),但是在最新版本的 java 出现之前就有人问了,它声称有:
“JSR 166 下的并发实用程序”
那么,他们放了什么东西吗?
虽然可以建议 Parallel.For 类似于 ExecutorService.submit,但我怀疑它不是。
public static void main(String... args) throws InterruptedException {
long start1 = System.nanoTime();
int runs1 = 1000;
final int[] a = new int[100];
for (int j = 0; j < runs1; j++) {
for (int i = 0; i < 100; i++) {
a[i] = a[i] * a[i];
}
}
long time1 = System.nanoTime() - start1;
System.out.printf("Each loop took an average of %,d micro-seconds%n", time1 / runs1 / 1000);
int processors = Runtime.getRuntime().availableProcessors();
long start2 = System.nanoTime();
ExecutorService executor = Executors.newFixedThreadPool(processors);
for (int j = 0; j < runs1; j++) {
for (int i = 0; i < 100; i++) {
final int i2 = i;
executor.submit(new Runnable() {
public void run() {
a[i2] = a[i2] * a[i2];
}
});
}
}
executor.shutdown();
executor.awaitTermination(1, TimeUnit.SECONDS);
long time2 = System.nanoTime() - start2;
System.out.printf("Parallel: Each loop took an average of %,d micro-seconds%n", time2 / runs1 / 1000);
}
印刷
Each loop took an average of 2 micro-seconds
Parallel: Each loop took an average of 149 micro-seconds
这表明在这个例子中,使用多线程是一个非常糟糕的主意。所以我希望循环效率更高一些
for (int j = 0; j < runs1; j++) {
for (int i = 0; i < processors; i++) {
final int i2 = i;
executor.submit(new Runnable() {
public void run() {
for (int i3 = i2 * 100 / processors; i3 < (i2 + 1) * 100 / processors && i3 < 100; i3++)
a[i2] = a[i2] * a[i2];
}
});
}
}
印刷
Parallel: Each loop took an average of 28 micro-seconds
如果您认为 Runnable 中的代码不是线程安全的,我怀疑 Parallel.For 做了一些完全不同或毫无意义的事情。
Java 8 中应该包含 Fork/Join 框架,以及 lambdas/closures... 就在最近,Java Champion 之一 Angelika Langer 就该主题发表了一场精彩的演讲
我的并行计算教授 Alan Kaminsky 和他的一群研究生编写了一个库,其中包含您需要的功能。
Javadocs、许可证、下载,甚至一本免费书籍都包含在信息页面上。
它是 GNU GPL 版本 3 下的自由软件。