-3

ExceptionJava コードのある時点で が発生した場合、コントロールはcatchブロックに移動します。ただし、このコードが実際にマルチスレッド メソッド内にある場合、コードが発生したときにメソッドrun()を終了するようにコードに指示するにはどうすればよいでしょうか?run()Exception

つまり、run()メソッドが終了したことをスレッドに指示するにはどうすればよいExceptionでしょうか。

4

2 に答える 2

4

...この例外が発生したときに run() メソッドで終了するようにコードに指示するにはどうすればよいですか。つまり、run() メソッドが終了したことをコードがスレッドに自動的に指示するにはどうすればよいですか?発生した?

私の理解が正しければ、コードをcatchブロックに入れるreturnか、終了条件を設定してください。それはスレッドを終了します。

いくつかのシナリオがあります:

outer を使用している場合はtry/catch、明示的に指定returnする必要はありません:

public void run() {

    try {
        while (!someExitCondition) {
            doSomethingUseful();
        }
    }
    catch (Exception e) {
        doSomethingWithTheException(e);
        // Just falling through ends the thread, because
        // `run` returns
    }
}

inner を使用している場合はtry/catch、明示的に使用するreturnか、(おそらくより良い) 終了条件を設定します。

public void run() {

    while (!someExitCondition) {
        try {
            doSomethingUseful();
        }
        catch (Exception e) {
            doSomethingWithTheException(e);
            return; // Terminates the thread; alternately, set a termination condition
        }
    }
}
于 2012-05-10T12:52:26.210 に答える
1

run()のメソッド内にいる場合は、他のメソッドを呼び出すとメソッドの処理が終了するのと同じ方法でを終了Threadできます。returnThreadreturn

たぶん、あなたが監視し、発生した場合にException呼び出すこのようなもの...returnException

public void run() {
    try {
        // your code goes here
    }
    catch (Exception e) {
        return;
    }
}

ただし、Thread複数のメソッドがある場合、最善の方法は、各メソッドにException. たとえば、あなたThreadがこのような場合...

public MyThread extends Thread {

    public void run() {
        try {
            runLongTask1();
            runLongTask2();
        }
        catch (Exception e) {
            return;
        }
    }

    public void runLongTask1() throws Exception {
        // your code here
    }

    public void runLongTask2() throws Exception {
        // your code here
    }
}

他の各メソッドがどのように をスローできるかを確認してくださいException。そのためException、 this のいずれかのメソッドで がスローされると、メソッドのThreadがトリガーされ、 が終了するためtry-catchrun()メソッドは終了します。returnThread

もちろん、メソッドtry-catch内のがメソッドのすべてのコードをカバーしている場合は、メソッドの最後に到達すると暗黙的であるため、run()実際に を実行する必要はありません。returnrun()

于 2012-05-10T13:06:48.883 に答える