Java进程waitFor()函数导致应用程序冻结

时间:2017-04-20 05:02:27

标签: java exec wait

在我的java应用程序中,我有一个日志备份功能:

rt = Runtime.getRuntime();
pr = rt.exec(command);
int exitVal = pr.waitFor();

if(exitVal == 0) 
   return true

问题是备份日志并获得响应需要一段时间,直到那时我的应用程序冻结了。如果我删除pr.waitFor()函数调用,我会收到响应,但日志备份无法正常工作。

2 个答案:

答案 0 :(得分:2)

waitFor()方法导致当前线程在必要时等待,直到此Process对象表示的进程终止。如果子进程已终止,则此方法立即返回。如果子进程尚未终止,则调用线程将被阻塞,直到子进程退出。

因此,您可以创建另一个执行命令的线程。 pr = rt.exec(命令); 。您可能必须异步执行此任务。因为直到子进程终止进程才会等待。

答案 1 :(得分:1)

是的,你应该在一个单独的线程中完成这项工作。阅读有关Runnable接口和Thread类

的信息