JAVA8之parallelStream()并行流的正确用法

/ 后端 / 没有评论 / 333浏览

1.因为是并行流,所以所涉及到的数据结构,需要使用线程安全的,比如

listByPage.parallelStream().forEach(str-> {
           //使用线程安全的数据结构
           //ConcurrentHashMap
           //CopyOnWriteArrayList
           //等等进行操作
        });

2.默认优先用在CPU密集型计算中,这里有的人就说了,用在IO密集比如HTTP请求啊什么的这种耗时高的操作并行去请求不是效果显著吗; 由于默认并行流使用的是全局的线程池,线程数量是根据cpu核数设置的,所以如果某个操作占用了线程,将影响全局其他使用并行流的操作; 所以折中的方案是自定义线程池来执行某个并行流操作;

  ForkJoinPool forkJoinPool = new ForkJoinPool(10);
        forkJoinPool.execute(() -> {
            listByPage.parallelStream().forEach(str -> {
                
            });
        });