文档章节

Java 8 数据流并行与非并行性能简单比较

l
 lzg14
发布于 2015/08/22 11:42
字数 367
阅读 1549
收藏 9

Java 8通过Stream的并行操作方式可以提高执行效率,下面通过代码比较下到底有多大程度的提高。

package javatest.learner;

import java.util.Arrays;
import java.util.List;
import java.util.Random;

/**
 * 统计含有1百万随机字符串,且每个字符串长度不超过10的列表中长度大于4的字符串数量
 * @author lzg
 *
 */
public class LambdaTest {

	public static void main(String[] args) {
		//生成含有1百万随机字符串,且每个字符串长度不超过10的列表
		ListstrList = geneRandomStringList(1_000_000, 10);
		long count = 0;
		
		//java 6常用的for循环方法
		long start = System.currentTimeMillis();
		for (String str : strList) {
			if (str.length() > 4)
				count++;
		}
		//System.out.println("None Stream Names Count:" + count);
		long end = System.currentTimeMillis();
		System.out.println("None Stream Time Used:" + (end - start));

		
		//Java 8 stream
		start = System.currentTimeMillis();
		count = strList.stream().filter(str -> str.length() > 4).count();
		//System.out.println("Long Names Count:" + count);
		end = System.currentTimeMillis();
		System.out.println("Normal Stream Time Used:" + (end - start));

		
		//Java 8 parallelStream
		start = System.currentTimeMillis();
		count = strList.parallelStream().filter(str -> str.length() > 4).count();
		//System.out.println("Long Names Count:" + count);
		end = System.currentTimeMillis();
		System.out.println("Parallel Stream Time Used:" + (end - start));

	}

	/**
	 * 生成随机字符串List
	 * @param total_Length //list的总长度
	 * @param str_maxlength //每个字符串最大长度
	 * @return
	 */
	private static ListgeneRandomStringList(int total_Length,
			int str_maxlength) {

		Random r = new Random();
		StringBuilder sb = new StringBuilder(total_Length);
		for (int i = 0; i < total_Length; i++) {
			for (int j = r.nextInt(str_maxlength); j > 0; j--) {
				sb.append((char) ('a' + r.nextInt(26)));
			}
			sb.append(" ");
		}

		return Arrays.asList(sb.toString().split(" "));
	}

}

运行结果:

None Stream Time Used:21
Normal Stream Time Used:88
Parallel Stream Time Used:22


可见并行比非并行要快几倍,不过传统的for循环速度一点不慢。


© 著作权归作者所有

共有 人打赏支持
l
粉丝 8
博文 29
码字总数 11715
作品 0
朝阳
加载中

评论(3)

腰间两把刀
腰间两把刀

引用来自“你是红薯派来的逗逼吗”的评论

多运行几次,你会发现,非并行和传统的for效率是一样的
然而多运行了几次 结果并非是这样的......
l
lzg14

引用来自“你个大胖子”的评论

多运行几次,你会发现,非并行和传统的for效率是一样的
说的很对
你是红薯派来的逗逼吗
你是红薯派来的逗逼吗
多运行几次,你会发现,非并行和传统的for效率是一样的
Java 8新特性探究(三)解开lambda最强作用的神秘面纱

我们期待了很久lambda为java带来闭包的概念,但是如果我们不在集合中使用它的话,就损失了很大价值。现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将深入解析...

OSC闲人
2013/11/18
0
42
集算器提升数据库JDBC取数性能

Java应用必须通过JDBC从数据库中取数,有时候我们会发现,数据库的负担一点也不重而且SQL很简单,但取数的速度仍然很慢。仔细测试会发现,性能瓶颈主要在JDBC上,比如MySQL的JDBC性能就非常差...

润乾软件
08/15
0
0
Reactive Programming 一种技术,各自表述

前言 作为一名 Java 开发人员,尤其是 Java 服务端工程师,对于 Reactive Programming 的概念似乎相对陌生。随着 Java 9 以及 Spring Framework 5 的相继发布,Reactive 技术逐渐开始被广大从...

小马哥mercyblitz
07/23
0
0
Java 8里面lambda的最佳实践

Java 8已经推出一段时间了,越来越多开发人员选择升级JDK,这条热门动弹里面看出,JDK7最多,其次是6和8,这是好事! 在8 里面Lambda是最火的主题,不仅仅是因为语法的改变,更重要的是带来了...

OSC闲人
2015/04/30
0
41
java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 的区别

Eclipse崩溃,错误提示: MyEclipse has detected that less than 5% of the 64MB of Perm Gen (Non-heap memory) space remains. It is strongly recommended that you exit and restart M......

大数据之路
2013/04/15
0
1

没有更多内容

加载失败,请刷新页面

加载更多

00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
4
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
122
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
4
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部