0

私はこれを読みました

メソッドが正常に完了したか、中断されたかをどのように確認しますか?

編集:質問をより明確かつ具体的にするために、以下は私のコードです..test.javaファイルを実行してそのランタイムを取得したい..ただし、1秒以上かかる場合はエラーメッセージを表示して停止したいそれ自体があります..

public class cl {  
    public static void main(String args[])throws IOException  
    {  
        String s=null;  
    Process p=Runtime.getRuntime().exec("javac C:\\Users\\Lokesh\\Desktop\\test.java");  
    BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));  
    while ((s = stdError.readLine()) != null) {  
            System.out.println(s);  
    }  
    Timer timer=new Timer(true);  
    InterruptTimerTask interruptTimerTask=new InterruptTimerTask(Thread.currentThread());  
    timer.schedule(interruptTimerTask,1);  
    try{  
        Runtime.getRuntime().exec("java C:\\Users\\Lokesh\\Desktop\\test");  
    }  
    catch (Exception e)  
    {  
        e.printStackTrace();  
    }  
    finally {  
        timer.cancel();  
    }  
}  
static class InterruptTimerTask extends TimerTask {  
    private Thread thread;  
    public InterruptTimerTask(Thread thread)  
    {  
        this.thread=thread;  
    }  
    @Override  
    public void run()  
    {  
        thread.interrupt();  
    }  
}  
}  
4

2 に答える 2

0

例として:

try {
    Thread.sleep(10000);
    // method successfully completed

} catch (InterruptedException ex) {
    // method was interrupted. You can try sleep some more time if you want
}

Thread.sleep()中断できる方法の 1 つです。代わりに別のメソッドが存在する可能性があります。中断された状態をチェックする場合は、あなたのメソッドでさえあります。誰かがそれを中断したいことをメソッドが認識した場合、スローする必要がありInterruptedExceptionます (実行を継続する方がよい場合もあります)。

割り込みステータス フラグ

割り込みメカニズムは、割り込みステータスと呼ばれる内部フラグを使用して実装されます。Thread.interrupt を呼び出すと、このフラグが設定されます。スレッドが静的メソッド Thread.interrupted を呼び出して割り込みをチェックすると、割り込みステータスがクリアされます。あるスレッドが別のスレッドの割り込みステータスを照会するために使用する非静的 isInterrupted メソッドは、割り込みステータス フラグを変更しません。

慣例により、InterruptedException をスローして終了するメソッドは、その時点で割り込みステータスをクリアします。ただし、割り込みを呼び出す別のスレッドによって、割り込みステータスがすぐに再度設定される可能性は常にあります。

于 2012-06-17T16:58:55.453 に答える
0

何がスレッドを終了させたかを理解する最も簡単な方法は、ブール値のフラグを設定し、それを「中断」と呼び、InterruptedException. コードがその例外をスローする可能性があることを他に何もしていないと仮定すると、次のコードでフラグの値を確認できます。

于 2012-06-17T15:30:36.087 に答える