【发布时间】:2019-01-25 05:52:21
【问题描述】:
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 的 sysout,服务器和程序也不例外。
我想知道怎么可能在完成 2 之前触发 11?
【问题讨论】:
-
l1 和 l2 是分离的?那是在 l1 中没有价值,在 l2 中也是如此?
-
你需要
join线程..你可以使用CompletableFuture或者Executors -
按照当前答案中的建议,尝试用一些简单的日志输出替换对 REST 端点的实际调用,看看是否还有这个问题。鉴于您当前的代码,没有迹象表明有任何问题。
-
我没有发现任何问题。它将按您的预期处理(打印)......它不会在 2 之前处理 11。其他肯定是错误的
-
您更新的代码仍然可以。 l1 中的所有元素将在 l2 中的元素之前处理。如何调用 sh 脚本以及脚本的外观如何?问题可能出在那儿。
标签: java parallel-processing java-stream