第48條 謹慎使用Stream并行
- 如果
Stream
是通過Iterator
創(chuàng)建的滔悉,或者使用了中間操作的limit
逛艰,那么并行pipeline
也不能提高性能 - 如果想要在
Stream
上通過并行提高性能,最好是通過ArrayList
痢艺、HashMap
、HashSet
、ConcurrentHashMap
余佃、等,他們的特點是可以方便精切的被切分成任意大小的子范圍 -
Stream
的終止操作也會影響執(zhí)行效率跨算。應(yīng)該盡量將工作放到pipeline
而不是終止操作中進行爆土。并行的最佳操作是做減法,如reduce
诸蚕、min
步势、max
、count
背犯、sum
等等坏瘩。"驟死式操作",比如anyMatch
漠魏、allMatch
等等也可以倔矾。collect
操作的性能不會很好,因為合并集合的代價比較高
思考
- 適合使用
parallelStream
的場景還是相對較少的柱锹,比較典型的像并發(fā)call外部接口哪自,可能單次會耗時幾秒鐘,如果使用并行流的話性能會有所提升 - 使用
parallelStream
還是需要注意禁熏,盡量保證單個task執(zhí)行很快并且這個方法本身并發(fā)不會很高壤巷。并行流本身應(yīng)該還是創(chuàng)建了線程池,如果方法并發(fā)很高匹层,每次執(zhí)行都創(chuàng)建線程池隙笆,容易造成OOM