Это псевдокод того, что я делал:
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 выбрасывается
Я понимаю, что это значит, потому что один поток может ожидать, в то время как другой тоже хочет ждать, но как мне преодолеть это исключение, и я также смогу использовать waitFor ().
Любая помощь оценивается. Я не нашел необходимости публиковать код, но дайте мне знать, если вам, ребята, это нужно.
Код для ExecutorService:
while(...){
.......
execServ.execute(...);
}
execServ.shutdown();
while(!execServ.isTerminated()){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
}