使用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()代码>