.NET具有的Parallel.For它可以让你在并行而不必直接玩弄线程运行一个循环。
有没有在Java中类似的东西?我发现了完全相同的问题(Here),但有人问之前的Java的最新版本出来了,号称有:
“JSR 166并发工具”
所以,他们才装上去?
.NET具有的Parallel.For它可以让你在并行而不必直接玩弄线程运行一个循环。
有没有在Java中类似的东西?我发现了完全相同的问题(Here),但有人问之前的Java的最新版本出来了,号称有:
“JSR 166并发工具”
所以,他们才装上去?
fork/join框架应包括与Java 8,用lambda表达式/关闭一起......就在最近,有对安格兰格,Java的冠军
我的并行计算教授一个主题一个很好的演讲,艾伦卡明斯基(Alan Kaminsky)和他的一群研究生写了一个有你需要的功能的图书馆。
Javadocs,许可证,下载,甚至是免费的书都包含在信息页面上。
这是自由软件的GNU GPL版本3
下,虽然可以认为是的Parallel.For对simular 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
如果你认为在可运行的代码不是线程安全的,我怀疑的Parallel.For做一些事情,而不同或者它毫无意义。
我相信你的问题已经回答[这里](http://stackoverflow.com/a/4010275/1221734)。 – gkaran89 2012-07-16 18:29:04
我找到了这个问题。我与它联系在一起。我想知道是否有官方的东西。 – Haedrian 2012-07-16 18:30:07
@MarkByers - 我已经说过了。我把这个问题和那个问题联系在一起。我问他们是否在Java 1.7中放置了某些东西 - 这是发生在该帖子和现在之间的东西。 – Haedrian 2012-07-16 18:30:55