-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