这是我一直在做的伪代码:
ProcessBuilder processBuilder = new ProcessBuilder(cmdToExecute);
Process process = processBuilder.start();
StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(), "ERROR");
StreamGobbler outStreamGobbler = new StreamGobbler(process.getInputStream(), "OUTPUT");
errorGobbler.start();
outStreamGobbler.start();
int exitValue = process.waitFor();
process.destroy();
使用
时出现InterruptedExceptionProcess.waitFor()
命令。当它是一个单线程java应用程序时很好。但 现在它是一个多线程应用程序,我正在
java.lang.InterruptedException
就那个特殊线。 Java doc说:
抛出:InterruptedException - 如果当前线程被中断 在等待的另一个线程中,等待结束并且等待 抛出InterruptedException
我明白这是什么意思,因为1个线程可能正在等待,而另一个线程也想等待,但我如何克服这个异常,我也可以使用waitFor()。
任何帮助都是适用的。我没有必要发布代码,但如果你们需要它,请告诉我。
ExecutorService代码:
while(...){
.......
execServ.execute(...);
}
execServ.shutdown();
while(!execServ.isTerminated()){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
答案 0 :(得分:1)
我不确定你是否理解Javadoc的含义。这是说如果某个其他线程在执行您在调用waitFor()
之前或期间发布的代码的线程上调用interrupt()
,则会抛出InterruptedException
。它与两个同时等待某事的线程无关。
您的程序是否明确地在任何地方调用interrupt()
?或者,您是通过ExecutorService
执行此流程吗?取消已提交给执行程序的任务时,可能会中断该任务。