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。
rest调用将触发服务器中的sh脚本,每个脚本将花费15-90秒。 实际-在服务器上,我看到2和11的脚本正在运行。我还没有看到2的sysout,服务器和程序中也没有例外。
我想知道在完成2之前如何触发11?
答案 0 :(得分:0)
问题不对劲。这是我编写的代码,在我的示例中,第一个流总是在第二个流之前完成。
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) {
}
});
}
}
我的猜测是您使用的HTTP客户端库在后台进行活动,因此第二个流在第一个流完成之前就已开始。