什么是 Java 并行流?

Java 并行流是 Java 8 及更高版本的一项功能,旨在利用处理器的多个核心。通常,任何 Java 代码都有一个处理流,按顺序执行。而通过使用并行流,我们可以将代码划分为多个流,这些流在单独的内核上并行执行,最终结果是各个结果的组合。然而,执行顺序不受我们控制。

因此,如果无论执行顺序如何,结果都不受影响,并且一个元素的状态不影响另一个元素以及数据源也不受影响,那么建议使用并行流。

Java并行流效果图

为什么使用并行流?

引入并行流是为了提高程序的性能,但选择并行流并不总是最佳选择。在某些情况下,我们需要按特定顺序执行代码,在这些情况下,我们最好使用顺序流来执行任务,但会牺牲性能。两种流之间的性能差异仅在大型程序或复杂项目中才需要考虑。对于小规模的程序,它甚至可能不会被注意到。基本上,当顺序流表现不佳时,您应该考虑使用并行流。

创建流的方法 

我们可以通过两种方式创建,下面列出并稍后描述如下:

  1. 在流上使用parallel()方法

  2. 在集合上使用parallelStream() 

方法1:在流上使用parallel()方法

BaseStream 接口的parallel () 方法返回等效的并行流。让我们通过一个例子来解释它是如何工作的。

在下面给出的代码中,我们创建一个文件对象,该对象指向系统中预先存在的“txt”文件。然后我们创建一个 Stream,一次从文本文件中读取一行。然后我们使用parallel()方法在控制台上打印读取的文件。每次运行的执行顺序都不同,您可以在输出中观察到这一点。下面给出的两个输出具有不同的执行顺序。

例子 

// Java Program to Illustrate Parallel Streams 
// Using parallel() method on a Stream 

// Importing required classes 
import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.util.stream.Stream; 

// Main class 
// ParallelStreamTest 
public class GFG { 

	// Main driver method 
	public static void main(String[] args) throws IOException { 

		// Creating a File object 
		File fileName = new File("M:\\Documents\\Textfile.txt"); 

		// Create a Stream of string type 
		// using the lines() method to 
		// read one line at a time from the text file 
		Stream<String> text = Files.lines(fileName.toPath()); 

		// Creating parallel streams using parallel() method 
		// later using forEach() to print on console 
		text.parallel().forEach(System.out::println); 

		// Closing the Stream 
		// using close() method 
		text.close(); 
	} 
}

输出: 

1A

输出结果示意图-1

1B

输出结果示意图-2

方法 2:在集合上使用parallelStream()

Collection 接口的parallelStream () 方法返回一个可能的并行流,以集合为源。让我们通过一个例子来解释它的工作原理。

执行:

在下面给出的代码中,我们再次使用并行流,但这里我们使用列表来读取文本文件。因此,我们需要parallelStream()方法。

例子

// Java Program to Illustrate Parallel Streams 
// using parallelStream() method on a Stream 

// Importing required classes 
import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.util.*; 

// Main class 
// ParallelStreamsTest 
public class GFG { 

	// Main driver method 
	public static void main(String[] args) 
		throws IOException 
	{ 

		// Creating a File object 
		File fileName 
			= new File("M:\\Documents\\List_Textfile.txt"); 

		// Reading the lines of the text file by 
		// create a List using readAllLines() method 
		List<String> text 
			= Files.readAllLines(fileName.toPath()); 

		// Creating parallel streams by creating a List 
		// using readAllLines() method 
		text.parallelStream().forEach(System.out::println); 
	} 
}

输出:

输出结果示意图-3文章来源地址https://www.toymoban.com/diary/java/639.html

到此这篇关于什么是 Java 并行流?的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/java/639.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
上一篇 2023年12月29日 16:25
Flutter vs Native:哪个对于您的移动应用程序最好?
下一篇 2023年12月29日 16:57

相关文章

  • 大数据学习(18)-任务并行度优化

    大数据学习 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博主哦🤞 对于一个分布式的计算任务而言,设置一个合适的并行度十分重要。Hive的计算任务由MapReduce完成,故并行度的

    2024年02月07日
    浏览(34)
  • GEMM优化、并行优化、算子优化,从BLISlab项目入手! GEMM重要且典型

    BLISlab 是一个开源教学项目,提供了完整的代码范例和测试脚本教人如何一步步优化矩阵乘法。为此, 张先轶(中科院博士,OpenBLAS国际知名开源项目发起人) 录制了一个公开课系列,基于BLISlab项目给大家系统讲解GEMM优化。  视频三连发,您能不能也三连发?“点赞--转发

    2023年04月22日
    浏览(18)
  • rt下降40%?程序并行优化六步法

    性能优化是我们日常工作中很重要的一部分,主要有以下原因: 降低服务器和带宽等硬件成本:用更少的资源处理更多的请求 提高现实世界的运行效率:人机处理效率存在数量级的偏差,同样机器世界的效率提升能带来现实世界效率提升的方法效果 提高用户的体验:解决响

    2024年02月05日
    浏览(21)
  • 【配电网优化】基于串行和并行ADMM算法的配电网优化研究(Matlab代码实现)

    💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳ 座右铭: 行百里者,半于九十。 📋 📋 📋 本文目录如下: 🎁 🎁 🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码实现 随

    2023年04月23日
    浏览(33)
  • 并行编程解决什么问题?

    多线程爬虫是指通过多个线程并发地请求网页和解析响应,以提高爬虫的效率和速度。在 Python 中可以使用 threading、Queue 和 requests 等模块来实现。 并行编程是一种利用多个处理器/内核/线程来同时执行代码的编程方式。它可以解决以下几个问题: 提升程序的性能 在多任务或

    2024年02月07日
    浏览(12)
  • 高性能计算实验——矩阵乘法基于MPI的并行实现及优化

    熟练掌握MPI编程方法,并将通用矩阵乘法转为MPI并行实现,进一步加深MPI的使用与理解。 进一步熟悉MPI矩阵乘法的实现,学习MPI点对点通信与集合通信的异同点和各自的优缺点,学会比较二者的性能以及各自使用的情形。 学习如何将自己编写的代码改造为标准库函数,供其

    2024年02月03日
    浏览(22)
  • 为什么需要多语言并行机器翻译?

    随着全球化的加速和不同语言之间的交流需求不断增长,多语言机器翻译(Multilingual Parallel Machine Translation)成为一个备受关注的领域。传统上,机器翻译系统主要集中于一对特定语言之间的翻译,但这种单一语言对的模式在面对多语言环境时存在一些挑战。因此,多语言并

    2024年02月12日
    浏览(20)
  • 为什么串行接口速率比并行接口快?

    串行接口的速率会比并行快,可以从下面四个方面考虑: ①高速串口不需要时钟信号来同步数据流,也就没有时钟周期性的边沿,频谱不会集中,所以噪声干扰少很多。 以PCIE和SATA为例,时钟信息通过8b/10b编码已经集成在数据流里面,数据本身经过加扰,绝对不可能有多于

    2024年02月07日
    浏览(27)
  • python一点通: 并行技术有几种? thread和process有什么区别

    在Python中,并行性是一种技术,允许程序同时执行多个任务,从而提高整体性能。Python提供了几种实现并行性的方法,包括线程(threading)、多进程(multiprocessing)以及concurrent.futures模块。在本博文中,我们将探讨线程和进程的概念,它们的区别以及何时选择它们。我们还将

    2024年02月09日
    浏览(20)
  • Java并发(一)----进程、线程、并行、并发

    进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了

    2023年04月10日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包