Java并行流问题之parallelStream的使用方式

简介: Java并行流问题之parallelStream的使用方式

最近在同事的代码里,发现了->的代码,觉得有点惊讶和疑惑,虽然知道->{}是匿名函数的表达式,但却被parallelStream所吸引。

就像这样的代码:

复制代码
List specialModelNeedToBeSaved = bom.parallelStream()
.filter(a->CodeStartWithList.getStartWithListOfModel().contains(a.getScpe().substring(0,2)))
.filter(b->"(".equals(b.getScpe().substring(3,4))||"(".equals(b.getScpe().substring(3,4)))
.collect(Collectors.toList());
//代码效果参考:http://www.zidongmutanji.com/zsjx/323075.html

看着挺长挺nb的,百度了才知道parallelStream是一个叫并行流的东西,Java1.8才加入的。它通过默认的ForkJoinPool,提高多线程任务的速度,默认线程数量等于运行计算机上的处理器数量。Java8为ForkJoinPool添加了一个通用线程池,这个线程池用来处理那些没有被显式提交到任何线程池的任务。当调用Arrays类上添加的新方法时,自动并行化就会发生。

注意哦,这里是并行,不是并发。因为是多个处理器同时处理,和并发还是有区别的。

我们可以用parallelStream来处理list里的元素,比如输出:

复制代码
TestTwo testTwo = new TestTwo();
List list = new ArrayList<>();
for(int i=1;i<100;i++) list.add(i); list.parallelStream().forEach(a->{
out.println(a);
});
//代码效果参考:http://www.zidongmutanji.com/bxxx/341800.html

 这样输出是无序,当然我们也可以让它有序的!forEachOrdered就是按照list的顺序依次执行。

list.parallelStream().forEachOrdered(a->{
out.println(a);
});
 我们也可以通过fiter来过滤list里的值,需要注意的是后面的匿名函数需要有true,false返回值,以此才能知道,哪些元素是需要被过滤的。

复制代码
List p2 = list.parallelStream().filter(a->{
if(a>95){
return true;
}else{
return false;
}
}).collect(Collectors.toList());
p2.parallelStream().forEachOrdered(a->{
out.println(a);
});

相关文章
|
1月前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。
|
1月前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
5月前
|
并行计算 Java 大数据
Java中的高效并行计算与多线程编程技术
Java中的高效并行计算与多线程编程技术
|
5月前
|
存储 Java 调度
线程操纵术并行策略问题之Java的并行编程优势问题如何解决
线程操纵术并行策略问题之Java的并行编程优势问题如何解决
|
6月前
|
Java 程序员
Java多线程编程是指在一个进程中创建并运行多个线程,每个线程执行不同的任务,并行地工作,以达到提高效率的目的
【6月更文挑战第18天】Java多线程提升效率,通过synchronized关键字、Lock接口和原子变量实现同步互斥。synchronized控制共享资源访问,基于对象内置锁。Lock接口提供更灵活的锁管理,需手动解锁。原子变量类(如AtomicInteger)支持无锁的原子操作,减少性能影响。
50 3
|
5月前
|
设计模式 并行计算 安全
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
58 0
|
5月前
|
Java 调度 Windows
Java面试之程序、进程、线程、管程和并发、并行的概念
Java面试之程序、进程、线程、管程和并发、并行的概念
33 0
|
5月前
|
并行计算 监控 Java
Java中的并行计算与任务分发策略
Java中的并行计算与任务分发策略
|
5月前
|
安全 Java 测试技术
Java中的并行流详解
Java中的并行流详解
|
5月前
|
安全 Java 测试技术