Java 8 数据流并行与非并行性能简单比较
博客专区 > lzg14 的博客 > 博客详情
Java 8 数据流并行与非并行性能简单比较
lzg14 发表于3年前
Java 8 数据流并行与非并行性能简单比较
  • 发表于 3年前
  • 阅读 1479
  • 收藏 9
  • 点赞 0
  • 评论 3

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: Java 8 Stream并行与非并行性能简单比较

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循环速度一点不慢。


  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 8
博文 29
码字总数 11715
评论 (3)
你是红薯派来的逗逼吗
多运行几次,你会发现,非并行和传统的for效率是一样的
lzg14

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

多运行几次,你会发现,非并行和传统的for效率是一样的
说的很对
腰间两把刀

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

多运行几次,你会发现,非并行和传统的for效率是一样的
然而多运行了几次 结果并非是这样的......
×
lzg14
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: