-1
私は方法1を使用するときにかかる時間を測定した(方法2)のJava - Javaの8 parallelStream及び作成スレッド自身を
をジャワ8のparallelStream
(法1)を使用して並列スレッドを作成するの差を検索しようとしていたとの違い方法2しかし、私は大きな偏差を発見した。方法2(〜700ms)法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つのコアを言っている場合、それは並列 – user7
user7 @あなたはしかし、あなたは '-Djava.util.concurrentを設定することができます実行している以上の4つのスレッドを持つことが可能です。 ForkJoinPool.common.parallelism = 'ただし、これはCPUバインドタスクには最適ではありません。 https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html –
java8のparallelStreamを使用する場合、ループの繰り返しごとに1つのスレッドは作成されませんか?しかし、method2を使うときは、そのような振る舞いを強制しますか? – user7