.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