我正在尝试运行一个异步进程,我不希望程序等待直到这些进程执行完毕。我发现了这个问题:如何在Java程序内部异步运行shell脚本,但它没有我要找的答案。
我的做法很简单,我只是在运行bash进程后,不想让Java程序等待它完成。这是我的做法:
我在主方法的末尾再次打印输出,所以我获得了以下输出结果:
我的做法很简单,我只是在运行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");
}
我在主方法的末尾再次打印输出,所以我获得了以下输出结果:
Task Dispatched
Task Dispatched
End of psvm
然而,由于这两个进程没有终止,程序并未终止。
我该如何解决这个问题?
Thread.sleep()
并设置了2000毫秒的延迟,现在它可以正常工作了。我知道这听起来像一种不好的做法,但我真的不知道如何解决... - Sarp Kaya