大家好,又见面了,我是你们的朋友全栈君。
Java 8 里面的stream 有串行流和并行流之分。
说高级的stream就是那个并行流。下面是那个并行流的简单实现。只要是继承Collection类的都可以这么用。
list.stream().parallel()
list.parallelStream()
先看代码和运行结果,再解释一下,这个并行串行流之间的差别。
package com.lxk.lambdaTest;
import com.google.common.collect.Lists;
import java.util.List;
/**
* 测试性能(Java 8 的循环和Java 7 的循环耗时的对比测试)
*
* Created by lxk on 2017/8/31
*/
public class Performance {
public static void main(String[] args) {
List list = getLoopList();
normalBeforeLoop(list);
normalAfterLoop(list);
notNormalAfterLoop(list);
}
private static void notNormalAfterLoop(List list) {
long a = System.currentTimeMillis();
list.stream().parallel().forEach(System.out::print);
System.out.println(” list.stream().parallel().forEach 执行耗时 : ” + (System.currentTimeMillis() – a) / 1000f + ” 秒 “);
}
private static void normalAfterLoop(List list) {
long a = System.currentTimeMillis();
list.stream().forEach(System.out::print);
System.out.println(” list.stream().forEach 执行耗时 : ” + (System.currentTimeMillis() – a) / 1000f + ” 秒 “);
a = System.currentTimeMillis();
list.forEach(System.out::print);
System.out.println(” list.forEach 执行耗时 : ” + (System.currentTimeMillis() – a) / 1000f + ” 秒 “);
}
private static void normalBeforeLoop(List list) {
long a = System.currentTimeMillis();
for (String s : list) {
System.out.print(s);
}
System.out.println(” for each 执行耗时 : ” + (System.currentTimeMillis() – a) / 1000f + ” 秒 “);
}
private static List getLoopList() {
List list = Lists.newArrayList();
for (int i = 0; i < 10000; i++) {
list.add(“item ” + i);
}
return list;
}
}
下面是代码运行结果:
好,关于,那个并行和串行的流的差别,可以看到啦。
并行的流,在循环的时候,就不是 1 – 9999 挨着输出。而是,看多核的心情。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161827.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...