1、说明
案例分别通过parallelStream()流和stream()流对两个个大小为1000的list集合进行遍历,每次遍历花费时间至少为10毫秒,通过比较得出两个流哪位速度更快,相差结果相当大
废话不多说,直接上代码!
2、案例
package org.springblade;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class test {
public static void main(String[] args) {
List<String> objects = new ArrayList<>();
List<String> objects2 = new ArrayList<>();
//初始化1000
for (int i = 0; i < 1000; i++) {
objects.add("s");
objects2.add("s");
}
//分别遍历计算时间
long start = System.currentTimeMillis();
objects.parallelStream().forEach(new Consumer<String>() {
@Override
public void accept(String s) {
try {
Thread.sleep(10);//毫秒
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
System.out.println("并行流:"+(System.currentTimeMillis() - start));
long start2 = System.currentTimeMillis();
objects2.stream().forEach(new Consumer<String>() {
@Override
public void accept(String s) {
try {
Thread.sleep(10);//毫秒
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
});
System.out.println("串行流:"+(System.currentTimeMillis() - start2));
}
}
3、运行结果

结果说明:在此案例中执行1000次后并行流执行时间为2064ms,串行流为15926ms
4、使用场景说明
- stream: 适用于避免线程安全问题、要求顺序执行、数据处理简单不耗时的任务;
- parallelStream: 适用于不存在线程安全问题、不需要顺序性执行、数据处理比较耗时的任务;
5、废话
客户:查个搜索查半天,页面一直在转圈圈!
领导:怎么回事???你的接口为什么这么慢?
parallelStream在实际的使用中在特定的场景下的作用是非常大的,常见用于处理大量的数据,用的好了能少挨领导一顿骂,挽回客户的信心,加油!
6、补充
如果流了本身执行的并不是相当耗时的任务那么如只有几毫秒,那就正常用回stream流
本文通过实例比较了Java中的parallelStream和stream流在遍历1000个元素列表时的性能差异,指出parallelStream适用于数据处理耗时的任务,而stream则在保证线程安全和顺序性时更适用。
1115

被折叠的 条评论
为什么被折叠?



