2

スレッドの run メソッドの本体で例外が発生した場合、それが反映される場所 (Caller) と、これを処理する方法について説明したいと思います。

ここに私のコードがあります:

class MyThread extends Thread{
        public void run() throws IllegalInterruptedException{
               Thread.currentThread().sleep(1234);
        }
}

次に、who(Caller) がこの例外を管理します。

4

5 に答える 5

1

2 つの異なるケースがあります。

  • JVM は、ThreadGroup 用にすでにインストールされている場合、例外を例外ハンドラーに渡します。
  • それ以外の場合は、JVM が処理します。

サンプルプログラム:

public class ThreadGroupDemo extends ThreadGroup {
    public ThreadGroupDemo() {
        super("This is MyThreadGroupDemo");
    }
    public void uncaughtException(Thread t, Throwable ex) {
        // Handle your exception here .... 
    }
}

Thread t = new Thread(new ThreadGroupDemo(), "My Thread") {
        // Some code here ......  
};

t.start();  

注 :このリンクを確認してください。

于 2011-06-11T16:40:36.917 に答える
0

さらに別のオプション - タスクを Callable にし、Executors を使用して送信します。Future を取得すると、すべての例外が自動的にラップされます。

于 2011-06-11T20:34:51.843 に答える
0

私がよく理解していれば、別のスレッドで発生した例外を処理できるようにする必要があります。サンプルのあるページの setDefaultUncaughtExceptionHandler を見てください。

Java2S

于 2011-06-11T15:08:17.537 に答える
0

通常とは異なる何かが発生すると、プログラムによって例外がスローされます。一般的なチュートリアルはこちらから入手できますが、要約すると、プログラムは、例外を処理する何かを見つけることを期待して、例外をスローするクラス内を検索します。おそらく次のような catch ステートメントです。

catch (IllegalInterruptedException e) {

//what you want the program to do if an IllegalInterruptedException
//is thrown elsewhere and caught here. For example:

System.err.println( "program interrupted!" + e.getMessage() );

}

プログラムがステートメントをスローするクラスで catch ステートメントを見つけることができない場合、親クラスでそれを処理する何かを探します。例外がスローされたときに子クラスが行っていたことは、例外がスローされると停止することに注意してください。このため、例外をスローする可能性のあるコードのブロックを「try」ブロックで囲み、実行したいものを「finally」ステートメントで続けてください。これは何があっても実行されます。

上にリンクされているチュートリアルは本当に役に立ちます。

于 2011-06-11T15:23:05.600 に答える
0

run()好きなように見main()て、自分の答えを得ることができます。run()しかし、..をオーバーライドして宣言できるとは思わないnew nonRuntime-Exceptionsので、コンパイルエラーが発生します。
ps: 見つかりIllegalInterruptedExceptionません。InterruptedException

于 2011-06-11T15:31:14.690 に答える