1.因为是并行流,所以所涉及到的数据结构,需要使用线程安全的,比如
listByPage.parallelStream().forEach(str-> {
//使用线程安全的数据结构
//ConcurrentHashMap
//CopyOnWriteArrayList
//等等进行操作
});
2.默认优先用在CPU密集型计算中,这里有的人就说了,用在IO密集比如HTTP请求啊什么的这种耗时高的操作并行去请求不是效果显著吗;
由于默认并行流使用的是全局的线程池,线程数量是根据cpu核数设置的,所以如果某个操作占用了线程,将影响全局其他使用并行流的操作;
所以折中的方案是自定义线程池来执行某个并行流操作;
ForkJoinPool forkJoinPool = new ForkJoinPool(10);
forkJoinPool.execute(() -> {
listByPage.parallelStream().forEach(str -> {
});
});