【发布时间】:2018-06-22 03:22:35
【问题描述】:
我正在尝试运行异步进程,我不希望程序等到这些进程执行结束。我找到了这个问题how to run shell script asynchronously from within Java program,但它没有我正在寻找的答案。
我正在做的只是运行 bash 进程,并且在运行它之后,我不希望 Java 程序等到它完成。这就是我所做的:
public void runCommandLine(String directory) throws IOException {
Thread commandLineThread = new Thread(() -> {
try {
ProcessBuilder processBuilder = new ProcessBuilder(
"/bin/bash");
processBuilder.directory(new File(directory));
Process process = processBuilder.start();
try (OutputStreamWriter osw = new OutputStreamWriter(process.getOutputStream())) {
osw.write(command);
}
printStream(process.getErrorStream(), true);
printStream(process.getInputStream(), true);
} catch (IOException ex) {
ex.printStackTrace();
}
});
commandLineThread.start();
System.out.println("Task Dispatched");
}
我还在 main 方法的末尾放了另一个打印输出,所以我得到了这个输出:
Task Dispatched
Task Dispatched
End of psvm
但是程序不会终止,因为这两个进程还没有终止。
我该如何解决这个问题?
【问题讨论】:
标签: java multithreading asynchronous process processbuilder