簡體   English   中英

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

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM