-1
我試圖找到我測量使用方法1時所用的時間使用Java 8的parallelStream
(方法1)和創建並行線程(方法2)爪哇 - 爪哇8 parallelStream和創建線程自己
之間的差之間的差異方法2.但我發現一個巨大的偏差。方法2(〜700毫秒)比方法1(〜20秒)
方法1的方式更快:(列表具有約100條)
list.parallelStream()
.forEach(ele -> {
//Do something.
}));
方法2:
for(i = 0;i < 100; i++) {
Runnable task =() -> {
//Do something.
}
Thread thread = new Thread(task);
thread.start();
}
注意:做一些事情是一個昂貴的操作,如擊中數據庫。
我將System.out.println()消息添加到兩者。我發現方法1(parallelStream)出現順序執行,而在方法2中,消息打印速度非常快。
任何人都可以解釋發生了什麼。
如果我們有說4個核心,是有可能有超過4個線程平行運行 – user7
@ user7你可以,但你必須設置'-Djava.util.concurrent。 ForkJoinPool.common.parallelism ='但是這對於任何CPU綁定任務來說都不是最優的。 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html –
所以,當使用java8的parallelStream時,一個線程將不會爲循環的每次迭代創建嗎?但是當使用方法2時,我們強制這樣的行爲? – user7