2016-05-27 8 views
-8

ドキュメントに記載されているように、並列ストリームを使用すると、並列にパイプラインを実行できます。今すぐ次のような簡単な例を考えてみましょう。Javaの並列ストリーム

List<Integer> lst; 
//initialiaziation of lst 
lst.parallelStream().mapToInt(Integer::intValue).max(); 

これはパイプラインが並列に実行されることを意味しますか?その場合、パイプラインを実行するスレッドの数はいくつですか?ストリーム・フレームワークは、実行するスレッドの数を決めることになります。

+0

まず、このコードはコンパイルされません。二番目:私はあまりにもストリームと同時性の共有畏敬の念のほかに何か質問はありますか? – MaxG

+1

スレッドの数は、ほとんどの実行戦略のように、実装の詳細です。しかし、OracleのJREでは、CPUコアの数に一致するデフォルトの並行性レベルを持つFork/Join Frameworkを使用することが知られています。ただし、並行性レベルは常にスレッド数と同じではありません。 – Holger

答えて

1

OCP:Oracle Certified Professional Java SE 8プログラマ||研究ガイド:試験1z0-809

[...]ご使用の環境 で利用可能なCPUの数に応じて、以下の並列ストリーム を使用してコードの可能な出力です[...]さらに優れた結果は、プロセッサーの数に応じてスケールされます。 スケーリングは、CPUなどのリソースを追加すると、結果が徐々に改善されるという特性です。 [...]


それをテストするために、あなたはpeekを使用して、4個のプロセッサを使用して、私にとってはThread.currentThread()

int i = list.parallelStream() 
      .peek(x -> System.out.println(Thread.currentThread())) 
      .mapToInt(Integer::intValue) 
      .max().getAsInt(); 

を印刷したい場合があり、私はそれに取り組んで正確に4つのスレッドを取得します。

関連する問題