文档章节

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

l
 lzg14
发布于 2015/08/22 11:42
字数 367
阅读 1560
收藏 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
Reactive Programming 一种技术,各自表述

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

小马哥mercyblitz
07/23
0
0
Effective Java 第三版——48. 谨慎使用流并行

Tips 《Effective Java, Third Edition》一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8...

M104
10/14
0
0
集算器提升数据库JDBC取数性能

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

润乾软件
08/15
0
0
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

没有更多内容

加载失败,请刷新页面

加载更多

Apache用户认证,域名跳转

11月15日任务 11.18 Apache用户认证 11.19/11.20 域名跳转 11.21 Apache访问日志 11.18 Apache用户认证 vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf //把123.com那个虚拟主机编辑......

zgxlinux
36分钟前
1
0
idea 添加 VUE 的语法支持和开发

《一》VUE的开发分两种,一种是直接在HTML文件中使用,一种是VUE文件的形式开发 1,首先我们先让 HTML 文件支持 VUE 的语法指令提示 2,File -> Setting -> Edit -> Inspections -> html 3,...

文文1
54分钟前
1
0
【NLP】【七】fasttext源码解析

【一】关于fasttext fasttext是Facebook开源的一个工具包,用于词向量训练和文本分类。该工具包使用C++11编写,全部使用C++11 STL(这里主要是thread库),不依赖任何第三方库。具体使用方法...

muqiusangyang
59分钟前
3
0
防止Tweak

什么是tweak? 英文意思为捏, 拧,扭,稍稍调整(机器、系统等)。 依据维基百科的定义,tweak指的是对电子系统进行轻微调整来增强其功能的工具;在ios中tweak特指那些能够增强其它可执行程...

HeroHY
今天
3
0
linux中常用标识---不定期更新

LINUX常用标识符: 1 & && | || &: 表示进程在后台运行 例如 redis-server & 不是所有后台运行都是& 比如es ./bin/elasticsearch -d es后台运行&&: 第一个命令执行成功后 才执行后面的命令...

geek土拨鼠
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部