[英]java multithreading using Process.waitFor() and java.lang.InterruptedException
這是我一直在做的偽代碼:
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文檔說:
拋出:InterruptedException-如果當前線程在等待時被另一個線程中斷,則等待結束,並拋出InterruptedException
我理解這是什么意思,因為1個線程可能正在等待,而另一個線程也想等待,但是我該如何克服此異常,也可以使用waitFor()。
任何幫助表示贊賞。 我發現沒有必要發布代碼,但是請告知我是否需要。
ExecutorService的代碼:
while(...){
.......
execServ.execute(...);
}
execServ.shutdown();
while(!execServ.isTerminated()){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}
我不確定您了解Javadoc的含義。 這是說,如果一些其它線程調用interrupt()
正在執行你之前或呼叫期間發布的代碼的線程上waitFor()
一個InterruptedException
將被拋出。 它與兩個線程同時等待某事無關。
您的程序是否在任何地方顯式調用interrupt()
? 或者,您是否通過ExecutorService
執行此過程? 當您取消已提交給執行者的任務時,該任務可能會被中斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.