Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Process.waitFor()和java.lang.InterruptedException的java多线程_Java_Multithreading_Interrupted Exception - Fatal编程技术网

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

使用Process.waitFor()和java.lang.InterruptedException的java多线程,java,multithreading,interrupted-exception,Java,Multithreading,Interrupted Exception,这是我一直在做的伪代码: ProcessBuilder processBuilder = new ProcessBuilder(cmdToExecute); Process process = processBuilder.start(); StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(), "ERROR"); StreamGobbler outStreamGobbler = n

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

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();
我在使用时遇到中断异常

Process.waitFor()

指挥部。当它是一个单线程java应用程序时,它还不错。但是 现在它是一个多线程应用程序,我得到

java.lang.InterruptedException

在那一行。 Java文档说:

抛出:InterruptedException-如果当前线程被中断 由另一个线程在等待时执行,则等待结束,并且 中断异常被抛出


我理解这意味着什么,因为一个线程可能正在等待,而另一个线程也希望等待,但我如何克服这个异常,并且我将能够使用waitFor()

欢迎任何帮助。我觉得没有必要发布代码,但如果你们需要,请告诉我

服务代码:

while(...){
                          .......
        execServ.execute(...);
    }
    execServ.shutdown();
            while(!execServ.isTerminated()){
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
                }

我不确定你是否理解Javadoc的意思。这意味着,如果其他线程在调用
waitFor()
之前或期间对正在执行您发布的代码的线程进行调用,将抛出
InterruptedException
。这与两个线程同时等待某些内容无关


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

“一个线程可能正在等待,而另一个线程也希望等待”。不,不完全是这样。这意味着其他线程中断了
wait()
调用。感谢Gray纠正我的错误,我应该怎么做才能消除此错误?相关:我已经为ExecutorsService添加了代码。你能给它点灯光吗?@user122591看起来不错。您正在调用的是
shutdown()
,而不是
shutdownNow()
,因此您正在运行的任务不应该被中断。您是否在任何地方调用
interrupt()
?另一个线程是否有权访问您的
ExecutorService
?我有6个线程同时运行。我无法弄清楚为什么以及谁在调用interrupt()?有没有办法找到谁/为什么要呼叫interupt?我没有在任何地方调用中断。谢谢调用中断的一种方法是检索与可运行任务对应的未来:
Future Future=pool.submit(任务)并取消此未来:
future.cancel()