Effective Java - 谨慎使用Stream并行

第48条 谨慎使用Stream并行

  1. 如果Stream是通过Iterator创建的,或者使用了中间操作的limit,那么并行pipeline也不能提高性能
  2. 如果想要在Stream上通过并行提高性能,最好是通过ArrayListHashMapHashSetConcurrentHashMap、等,他们的特点是可以方便精切的被切分成任意大小的子范围
  3. Stream的终止操作也会影响执行效率。应该尽量将工作放到pipeline而不是终止操作中进行。并行的最佳操作是做减法,如reduceminmaxcountsum等等。"骤死式操作",比如anyMatchallMatch等等也可以。collect操作的性能不会很好,因为合并集合的代价比较高

思考

  1. 适合使用parallelStream的场景还是相对较少的,比较典型的像并发call外部接口,可能单次会耗时几秒钟,如果使用并行流的话性能会有所提升
  2. 使用parallelStream还是需要注意,尽量保证单个task执行很快并且这个方法本身并发不会很高。并行流本身应该还是创建了线程池,如果方法并发很高,每次执行都创建线程池,容易造成OOM
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容