【发布时间】:2016-03-04 07:28:08
【问题描述】:
在我的主要流程中,我想并行执行一些任务。假设我有 4 个任务要在单独的流程中执行,但是在这 4 个任务中,需要先完成第一个任务,然后才能并行运行其他任务。
我认为我的代码可以按照我的要求运行,但有没有更好的方法?
public static void main(String[] args) {
System.out.println("In main");
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.submit(() -> {
runParalleltasks();
});
executor.shutdown();
System.out.println("Exiting main");
}
private static void runParalleltasks() {
System.out.println("Running parallel tasks");
doTask1();
ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(() -> {
doTask2();
});
executor.submit(() -> {
doTask3();
});
executor.submit(() -> {
doTask4();
});
executor.shutdown();
System.out.println("Exiting parallel tasks");
}
【问题讨论】:
-
为什么要有单线程执行器?
-
@matt 因为我想在与 main 不同的流程中执行我的 4 个任务,但是在这 4 个任务中,需要先完成第一个任务,然后才能并行运行其他任务。
-
我永远无法理解为什么人们在想要顺序执行时使用线程。 显然您应该内联运行第一个任务,然后生成其他三个任务。
-
@EJP 我需要在与 main 方法不同的流程中执行我的 4 个任务,并且 4 个任务中的最后 3 个任务取决于第一个任务的输出。
-
有谁知道在哪里可以用 Callables 而不是 Runnables 找到这个问题的答案?
标签: java multithreading parallel-processing java-8