java - 第二个并行流在完成第一个并行流之前启动

标签 java parallel-processing java-stream

import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class Main {

    public static void main(String[] args) {
        List<Integer> fullList = Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
        List<Integer> toBeLast = Arrays.asList(9,10,11,12);
        Random r = new Random();

        fullList.parallelStream().filter(l->!toBeLast .contains(l)).forEach(l->{
        System.out.println("L1 : " + e);
            try {

                Thread.sleep(Math.abs(r.nextLong() % 1000));
                    System.out.println(l);
            }
            catch(InterruptedException i) {

            }
        });

        toBeLast .parallelStream().forEach(l->{
            System.out.println("L2 : " + e);
                try {

                    Thread.sleep(Math.abs(r.nextLong() % 1000));
                    System.out.println(l);
                }
                catch(InterruptedException i) {

                }
        });

    }
}

期望 - 完成 1-8、13-14 并开始 9-12。

其余调用将触发服务器中的 sh 脚本,每个脚本需要 15-90 秒。 实际 - 在服务器中,我看到 2 和 11 的脚本正在运行。我还没有看到 2 的系统输出,服务器和程序也不异常(exception)。

我想知道如何在完成 2 之前触发 11?

最佳答案

这个问题有些不对劲。这是我编写的代码,在我的示例中,第一个流始终在第二个流之前完成。

import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class Main {

    public static void main(String[] args) {

        List<Integer> l1 = Arrays.asList(1,2,3,4,5,6,7,8,9,10,11,12,13,14,1,2,3,4,5,6,7,8,9,10,11,12,13,14,1,2,3,4,5,6,7,8,9,10,11,12,13,14,1,2,3,4,5,6,7,8,9,10,11,12,13,14);
        List<Integer> l2 = Arrays.asList(21,22,23,24,25,26,27,28,29,30,31,32,33,34,21,22,23,24,25,26,27,28,29,30,31,32,33,34,21,22,23,24,25,26,27,28,29,30,31,32,33,34,21,22,23,24,25,26,27,28,29,30,31,32,33,34);
        Random r = new Random();

        l1.parallelStream().forEach(e -> {
            System.out.println("L1 : " + e);
            try {

                Thread.sleep(Math.abs(r.nextLong() % 1000));
            }
            catch(InterruptedException i) {

            }
        });
        l2.parallelStream().forEach(e -> {
            System.out.println("L2 : " + e);
            try {

                Thread.sleep(Math.abs(r.nextLong() % 1000));
            }
            catch(InterruptedException i) {

            }
        });
    }
}

我的猜测是,您正在使用在后台执行 Activity 的 HTTP 客户端库,因此第二个流在第一个流完成之前启动。

关于java - 第二个并行流在完成第一个并行流之前启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54359650/

相关文章:

parallel-processing - MPI Fortran WTIME 运行不正常

c# - 是否有 CHESS 的替代方案来测试使用任务并行库编写的程序

java - 获取具有最大值的对象列表

java - 在运行时设置 JVM 参数

java - 使用循环的初学者二十一点游戏

java - 如何使用java在SQL中查找两个时间值的差异?

linux - 最大有效进程数 Linux

java - java中的并行流

java - 使用 Stream API 复制列表元素 N 次

java - 如何更改 GWT checkboxcell 的样式?