0

これは私がやっていることの疑似コードです:

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 がスローされます。

あるスレッドが待機している間に別のスレッドも待機している可能性があるため、それが何を意味するかを理解していますが、この例外をどのように乗り越えれば、waitFor() を使用できるようになります。

どんな助けでも感謝します。コードを投稿する必要はありませんでしたが、必要な場合はお知らせください。

ExecutorService のコード:

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

1 に答える 1

1

Javadoc の意味を理解しているかどうかわかりません。interrupt()の呼び出し前または呼び出し中に投稿したコードを実行しているスレッドで他のスレッドが呼び出されるとwaitFor()InterruptedExceptionがスローされると言っています。同時に何かを待っている 2 つのスレッドとは関係ありません。

あなたのプログラムは明示的にinterrupt()どこかを呼び出していますか? または、このプロセスを実行していExecutorServiceますか? Executor にサブミットされたタスクをキャンセルすると、タスクが中断される場合があります。

于 2012-02-17T17:57:14.977 に答える