在「Java 8 in action」(由Urma,Fusco和Mycroft撰寫)一書中,他們強調了並行流在內部使用公用分支連接池,並且儘管可以在全局配置,使用System.setProperty(...),它不可能爲單個並行流指定值。並行流與CompletableFuture之間的區別
我已經看到workaround,涉及在定製的ForkJoinPool中運行並行流。
在本書的後面,他們有一整章致力於CompletableFuture,在此期間他們有一個案例研究,他們比較了使用parallelStream和CompletableFuture的各自性能。事實證明,他們的表現非常相似 - 他們強調這是因爲它們都是默認使用相同的公共池(因此線程數量相同)。
他們繼續展示一個解決方案,並認爲CompletableFuture在這種情況下更好,因爲可以使用自定義的Executor來配置它,並且具有用戶選擇的線程池大小。當他們更新解決方案以利用它時,性能顯着提高。
這使我想 - 如果使用上面強調的解決方法對並行流版本執行相同的操作,性能優勢會是否相似,並且兩種方法在性能方面會再次相似嗎?在這種情況下,爲什麼選擇CompletableFuture而不是平行流呢?這顯然需要開發者更多的工作。