vis*_*shr 7 java process event-handling reactive-programming
我希望能够从JVM中启动外部进程并完成它.
我可以使用ProcessBuilder创建一个Process,然后使用Process.waitFor()来等待它的完成.但是,这是一个阻塞调用,只是浪费线程资源.
通过事件处理程序和反应式编程来实现这一点会更有意义.有人会认为JVM可以通过操作系统注册某种监听器来监听进程完成事件,并将其转发回程序.
这样的机制/ API是否存在?实现这一目标的任何替代品或库?
生成将等待进程完成的新线程:
final Process process = ...;
new Thread(new Runnable() {
@Override
public void run() {
try {
process.waitFor();
} catch (InterruptedException e) {
// thread is interrupted, check process state
}
// signal main thread
}
}).start();
Run Code Online (Sandbox Code Playgroud)
或者使用执行器:
Future<String> future = Executors.newSingleThreadExecutor().submit(new Callable<String>() {
@Override
public String call() throws Exception {
process.waitFor();
return "OK";
}
});
Run Code Online (Sandbox Code Playgroud)
稍后允许您通过 Future API 检查作业状态:future.isDone(), future.cancel(), ...