java - 相当于 Java 中进程的 ThreadPool
问题描述
我正在从 Java 中的一个类开始一些外部进程(使用类 Process),该类本身由 Linux 平台上的作业调度程序调用。
我的问题是,一旦主类调用了最后一个进程,作业调度程序就会终止所有内容。
因此,我正在寻找类似 ThreadPoolExecutor/CountDownLatch 之类的方法来管理这些进程并让主类在退出之前等待它们完成。
如果我在循环中调用process.waitFor(),它们将按顺序启动,这是我不想要的。
我是否需要将这些进程放入线程并使用真正的 ThreadPoolExecutor 或者是否有更漂亮/更简单的方法?
解决方案
不要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();
}
推荐阅读
- javascript - 使用“set”使用 Mongoose 更新现有子文档的数组元素有困难吗?
- reactjs - React Typescript 应用程序的屏幕变为空白
- javascript - npm 是否会始终安装指定范围内的最新可用版本?
- javascript - 如何从 Django 中的 html 或 js 访问环境变量
- c++ - 根据用户输入用字母填充向量,并将 Start 和 End 放在四肢上
- json - 如何在 vue js 应用程序中单击按钮下载 json 文件
- ubuntu - 为动态域(如通配符)发出 ssl
- r - 为 sf 对象的绘图设置色阶限制
- r - 为R中的每一行生成具有不同概率的随机数
- react-native - Expo React Native 上的 Android 唯一 ID