Parallel processing Java中并行方法和顺序方法的区别是什么?

Parallel processing Java中并行方法和顺序方法的区别是什么?,parallel-processing,java-8,Parallel Processing,Java 8,我目前尝试用Java8编写代码。昨天我找到了下一个例子,这些例子来自线性代数。在矩阵向量乘法的基础上(链接中的最后一个示例),我为矩阵乘法编码了我的所有者方法。我的代码在这里: import java.util.stream.IntStream; public static void matrixMatrixProduct() { System.out.println("Matrix matrix mulptiplication"); final int DIM1 = 15;

我目前尝试用Java8编写代码。昨天我找到了下一个例子,这些例子来自线性代数。在矩阵向量乘法的基础上(链接中的最后一个示例),我为矩阵乘法编码了我的所有者方法。我的代码在这里:

import java.util.stream.IntStream;

public static void matrixMatrixProduct() {
    System.out.println("Matrix matrix mulptiplication");
    final int DIM1 = 15;
    final int DIM2 = 20;
    final int DIM3 = 2;

    int[][] a = new int[DIM1][DIM2];
    int[][] b = new int[DIM1][DIM3];
    int[][] c = new int[DIM3][DIM2];
    int counter = 1;
    for (int i =0; i < DIM1; i++) {
        for (int j =0; j < DIM3; j++) {
            b[i][j] = counter++;
        }
    }

    for (int i =0; i < DIM3; i++) {
        for (int j =0; j < DIM2; j++) {
            c[i][j] = counter++;
        }
    }

    System.out.println("");
    System.out.println("Print matrix b");
    System.out.println("");
    for (int i = 0; i < DIM1; i++) {
        for (int j = 0; j < DIM3; j++) {
            System.out.print(b[i][j] + " ");
        }
        System.out.print("\n");
    }
    System.out.println("");
    System.out.println("Print matrix c");
    System.out.println("");
    for (int i = 0; i < DIM3; i++) {
        for (int j = 0; j < DIM2; j++) {
            System.out.print(c[i][j] + " ");
        }
        System.out.print("\n");
    }

    IntStream.range(0, DIM1)
        .parallel()
        .forEach( (i) -> {
            IntStream.range(0,  DIM2)
            .sequential()
            .forEach( (j) -> { 
                IntStream.range(0, DIM3)
                .parallel()
                .forEach( (k) -> {
                    a[i][j] += b[i][k]*c[k][j]; 
                });
             });
          });

    System.out.println("");
    System.out.println("Print matrix a");
    System.out.println("");
    for (int i = 0; i < DIM1; i++) {
        for (int j = 0; j < DIM2; j++) {
            System.out.print(a[i][j] + " ");
        }
        System.out.print("\n");
    }
import java.util.stream.IntStream;
公共静态无效矩阵matrixMatrixProduct(){
System.out.println(“矩阵乘法”);
最终int DIM1=15;
最终int DIM2=20;
最终int DIM3=2;
int[]a=新int[DIM1][DIM2];
int[]b=新int[DIM1][DIM3];
int[][]c=新int[DIM3][DIM2];
int计数器=1;
对于(int i=0;i{
IntStream.range(0,DIM2)

.forEach((j)->{
IntStream.range(0,DIM3)
.parallel()
.forEach((k)->{
a[i][j]+=b[i][k]*c[k][j];
});
});
});
System.out.println(“”);
System.out.println(“打印矩阵a”);
System.out.println(“”);
对于(int i=0;i

我的问题是,通过调用
IntStream
类,
parallel()
sequential()
方法之间到底有什么区别?(实际上这是最重要的部分,我在这里显式地进行乘法).基于这些知识,我想知道上次调用
IntStream
的正确用法是什么。目前我已经在这里定义了方法
parallel()
,但我不确定这是一个正确的解决方案…实际上,如果我将
parallel()
更改为
sequential()
我在输出中看不到任何差异。

并行操作同时发生。这意味着流的元素可以同时处理

连续的操作一次发生一个

从<代码>顺序>(代码)> <代码>并行()>代码>对结果没有影响,因为您的操作是独立于状态的,但可能影响您的运行时间。但是,如果您的操作影响将来的操作,则应该考虑使用<代码>序贯()< < /> >

我假设你希望矩阵运算并行进行,但我对数学不太熟悉


链接到@the8472引用的方法。

你读过方法的javadocs吗?很抱歉,@the8472的那些方法没有找到。如果你不知道这些方法是做什么的,我会读这篇文章,那么我不明白你为什么要首先使用它们。@zeroflagL,我之前说过,我使用矩阵向量乘法的源代码作为backgr矩阵乘法的基础代码。这两种方法在第一个源代码中已经预定义,我不想更改我不理解正确的部分。因此我在这里提问。我同意,询问矩阵向量乘法的第一个代码可能更好。