這是本文件的舊版!


Effective Java - Use caution when making streams parallel(working)

在Java 8中,你只要用以下寫法,很容易就可以讓你的工作並行化:

list.stream().parallel() ..
list.parallelStream() ..
但這個item要強調的是: 千萬別亂用!!

首先提到不適用的情況是使用Stream.iterate所產生的stream或者是透過limit處理的steam。這是由於預設的並行化流程並無法精準的知道該怎麼正確處理limit的邏輯。

能獲得較佳效能的結構有ArrayList、HashMap、HashSet、ConcurrentHashMap、arrays、int ranges與long ranges。這是由於它們的結構能夠容易被切割。

能獲得較佳效能的terminal operations包含reduce、min、max、count與sum;short-circuiting operations包含anyMatch、allMatch與noneMatch。(short-circuiting operations代表著滿足部分條件就可以停止繼續做下去,中文為短路操作,詳細範例可以參考link)

Effective Java第三版Item 48。

  • Effective Java, 3/e