Java8中的Stream()与ParallelStream()的区别

简介: Java8中的Stream()与ParallelStream()的区别

Stream

   无状态:指元素的处理不受之前元素的影响;

   有状态:指该操作只有拿到所有元素之后才能继续下去。

   非短路操作:指必须处理所有元素才能得到最终结果;

   短路操作:指遇到某些符合条件的元素就可以得到最终结果,如 A || B,只要A为true,则无需判断B的结果。

ParallelStream

对于ParallelStream,需要知道的是里面的执行是异步的,并且使用的线程池是ForkJoinPool.common,可以通过设置-Djava.util.concurrent.ForkJoinPool.common.parallelism = N来调整线程池的大小;

ParallelStream的作用

Stream具有平行处理能力,处理的过程会分而治之,也就是将一个大任务切分成多个小任务,这表示每个任务都是一个操作,因此像以下的程式片段:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
numbers.parallelStream().forEach(System.out::println);

得到的展示顺序不一定会是1、2、3、4、5、6、7、8、9,而可能是任意的顺序。得到的结论就是parallelStream()每次执行的结果都不相同,与多线程程序中执行的结果类似。如果希望最后顺序是按照原来Stream的数据顺序,那可以调用forEachOrdered()。例如:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);
numbers.parallelStream().forEachOrdered(System.out::println);

你得到的展示顺序就是1、2、3、4、5、6、7、8、9。

Java8并行流parallelStream()和stream()的区别就是支持并行执行,提高程序运行效率。但是如果使用不当可能会发生线程安全的问题。

 

其他同类知识点:

1、Java集合Stream类filter的使用;

2、Java中的排序问题(Java8新特性 stream流、stream多字段排序);

 

参考:

https://blog.csdn.net/y_k_y/article/details/84633001

https://blog.csdn.net/zhxdick/article/details/79228605


相关文章
|
1天前
|
Java API
深入探讨 Java 8 集合操作:全面解析 Stream API 的强大功能
深入探讨 Java 8 集合操作:全面解析 Stream API 的强大功能
9 2
|
2天前
|
Java C++
Java和C++的一些区别
Java和C++的一些区别
|
3天前
|
Java
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(二)
9 0
|
3天前
|
设计模式 Java 内存技术
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
Java基础7-一文搞懂抽象类和接口,从基础到面试题,揭秘其本质区别(一)
12 0
|
3天前
|
Java
guava Splitter 与java 内置的string的split 方法的区别
guava Splitter 与java 内置的string的split 方法的区别
5 0
|
3天前
|
存储 Java API
Java8实战-使用Stream
Java8实战-使用Stream
6 0
Java8实战-使用Stream
|
3天前
|
存储 分布式计算 Java
Java8实战-引入流(Stream)
Java8实战-引入流(Stream)
5 0
|
8天前
|
Java
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
10 0
|
8天前
|
存储 Java API
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
11 0
|
11天前
|
Java 程序员 编译器
蓝易云 - Java:Exception和Error有什么区别?
总的来说,Exception和Error的主要区别在于他们的用途和处理方式。Exception是可以被程序员处理的问题,而Error则是程序无法处理的严重问题。在编写代码时,程序员应该尽力处理可能出现的异常,但是对于错误,除非你知道如何处理,否则最好让程序终止,因为继续运行可能会导致更严重的问题。
9 0