小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
前言:最近在使用流式编程的Stream()时候发现使用ParallelStream()在读取文件时的速度更快。对此我Stream和ParallelStream做出了比较已经他们的引用场景。
区别:对于Stream他的处理方式为单管道的串行流,是进行无序的处理。ParallelStream的处理方式则是多管道的并行流。
代码展示:
这边我先定义了一个Integer类型的数组,因为是插入所以使用的是LinkedList。
public static List<Integer> buildIntLists() {
long startLinked = System.currentTimeMillis();
List<Integer> linkedList =new LinkedList();
for (int a = 1;a <=10000 ;a++) {
linkedList.add(a);
}
System.out.println("创建LinkedList : " + (System.currentTimeMillis() - startLinked) + "ms");
return Collections.unmodifiableList(linkedList);
}
复制代码
List<Integer> integerList = buildIntLists();
System.out.println("打印:"+integerList.toString());
// 首先我们用传统的for循环遍历(目前我都试过一般的循环体系中最原始的for是循环语句中执行效率最快的),这边实现的时候执行一次让他sleep1毫秒代码如下:
long start = System.currentTimeMillis();
for (int a = 0; a < integerList.size(); a++) {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("for循环遍历方式 : " + (System.currentTimeMillis() - start) + "ms");
// 其次我们来用Stream的forEach来实现,还是老样子执行一次让他sleep1毫秒代码如下:
start = System.currentTimeMillis();
integerList.stream().forEach(r -> {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
});
System.out.println("stream : " + (System.currentTimeMillis() - start) + "ms");
// 最后我们来用parallelStream的forEach来实现,还是老样子执行一次让他sleep1毫秒代码如下:
start = System.currentTimeMillis();
integerList.parallelStream().forEach(r -> {
try {
TimeUnit.MILLISECONDS.sleep(1);
} catch (Exception e) {
e.printStackTrace();
}
});
System.out.println("parallelStream : " + (System.currentTimeMillis() - start) + "ms");
复制代码
执行后的结果如下:
近期评论