並列ストリームはtrySplit()
スプリッテレータのメソッドを呼び出して、タスクをいくつかの部分に分割します。「私は分割を拒否します」と言うことから戻ることは絶対に合法です. この場合、スプリッテレータから作成されたストリームは、明示的に呼び出された場合でも順次実行されます。null
trySplit()
.parallel()
AbstractSpliterator
ただし、一般的には、クラスを拡張する少なくとも限定的な並列処理を提供できます。trySplit()
メソッドを呼び出すいくつかの入力要素を読み取り、それらを配列に格納し、その配列にスプリッテレータを返すデフォルトの実装を提供するtryAdvance()
ため、この部分はスプリッテレータとは完全に独立して個別に処理できます。これは「貧弱な」並列化ですが、下流のパイプライン操作に時間がかかる場合は、それでも速度が向上する可能性があります。
最後に、ほとんどの単純なケースでは、Spliterator の実装はスレッド セーフではないことに注意してください。独自の効率的なtrySplit()
実装を提供すると、元のスプリッテレータと新しく作成されたスプリッテレータが完全に独立した方法で処理されることが保証されます。したがって、分割後にプレフィックスとサフィックスのスプリッテレーターで共有状態を変更しない場合は、スレッドセーフを気にする必要はありません。