使用Process.waitFor()和java.lang.InterruptedException的java多线程

时间:2012-02-17 17:51:03

标签: java multithreading interrupted-exception

这是我一直在做的伪代码:

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();

使用

时出现InterruptedException
  

Process.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) {
                }

1 个答案:

答案 0 :(得分:1)

我不确定你是否理解Javadoc的含义。这是说如果某个其他线程在执行您在调用waitFor()之前或期间发布的代码的线程上调用interrupt(),则会抛出InterruptedException。它与两个同时等待某事的线程无关。

您的程序是否明确地在任何地方调用interrupt()?或者,您是通过ExecutorService执行此流程吗?取消已提交给执行程序的任务时,可能会中断该任务。