首页 > 解决方案 > 相当于 Java 中进程的 ThreadPool

问题描述

我正在从 Java 中的一个类开始一些外部进程(使用类 Process),该类本身由 Linux 平台上的作业调度程序调用。

我的问题是,一旦主类调用了最后一个进程,作业调度程序就会终止所有内容。

因此,我正在寻找类似 ThreadPoolExecutor/CountDownLatch 之类的方法来管理这些进程并让主类在退出之前等待它们完成。

如果我在循环中调用process.waitFor(),它们将按顺序启动,这是我不想要的。

我是否需要将这些进程放入线程并使用真正的 ThreadPoolExecutor 或者是否有更漂亮/更简单的方法?

标签: javamultithreadingprocessslurm

解决方案


不要process.waitFor()在启动进程的同一个循环中调用,而是在不同的循环中调用它:

List<Process> processes = new ArrayList<>(); 

// Start subprocesses and add them to the process list
for (...) {
    processes.add(processBuilder.start());
}

// Wait for them to complete
for (Process p : processes) {
    p.waitFor();
}

推荐阅读