Java并行流Parallel Streams

Java并行流Parallel Streams

是Java8和更高版本的一个特性,用于利用处理器的多个核心。通常,任何java代码都有一个处理流,在这里它是按顺序执行的。然而,通过使用并行流,我们可以将代码分成多个流,这些流在不同的内核上并行执行,最终的结果是各个结果的组合。然而,处理的顺序不在我们的控制之下

 

因此,建议在以下情况下使用并行流:无论执行顺序如何,结果不受影响一个元素的状态不影响另一个元素,并且数据源也不受影响

Java并行流Parallel Streams介绍

有两种方法可以在Java中创建并行流:

1. 对Stream流使用Parallel()方法

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

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

// An example to understand the parallel() method 
  
import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.util.stream.Stream; 
  
public class ParallelStreamTest { 
  
    public static void main(String[] args) throws IOException { 
  
        // Create 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()); 
          
        // Use StreamObject.parallel() to create parallel streams 
        // Use forEach() to print the lines on the console 
        text.parallel().forEach(System.out::println); 
          
        // Close the Stream 
        text.close(); 
    } 
} 

输出1:

Java并行流Parallel Streams介绍

输出2:

Java并行流Parallel Streams介绍

2. 对集合使用ParallelStream()

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

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

// An example of parallelStream() method 
  
import java.io.File; 
import java.io.IOException; 
import java.nio.file.Files; 
import java.util.*; 
  
public class ParallelStreamsTest3 { 
  
    public static void main(String[] args) throws IOException { 
  
        // Create a File object 
        File fileName = new File("M:\\Documents\\List_Textfile.txt"); 
  
        // Create a List 
        // Using readAllLines() read the lines of the text file 
        List<String> text = Files.readAllLines(fileName.toPath()); 
          
        // Using parallelStream() to create parallel streams 
        text.parallelStream().forEach(System.out::println); 
    } 
} 

输出:

Java并行流Parallel Streams介绍

为什么使用并行流?

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

posted on 2022-09-20 09:17  高达  阅读(1459)  评论(0编辑  收藏  举报

导航