0

チェックされていない例外を作成しています。私が見たのは、ほとんどの例外が super() を呼び出すことです。したがって、同様のパターンに従いました。

ログの目的、アプリケーションの回復、またはその特定のメソッド、またはその他のカスタム作業のために、チェックされていない例外 (システム定義およびカスタム) を処理する方法を知りたいですか?

マルチスレッド環境(ソケットプログラミング)に取り組んでいます。ThreadPoolExecutor を作成し、ソケットを開いて while ループで受け入れ、ThreadPoolExecutor によって作成されたスレッドにタスクを送信するネットワーク サービスを作成するメイン スレッドを作成します。1 つのスレッドが未チェックの例外をスローした場合、未チェックの例外の重大度に応じて、そのスレッドを強制終了するか、そのまま続行しますが、どちらの場合もログに記録します。

未チェックの例外のみを作成します。未チェックの例外をキャッチすると、未チェックにする意味がありません。問題を解決する方法はありますか。

Spring では、@ControllerAdvice と @ExceptionHandler を使用して Unchecked Exceptions を管理しましたが、ソケット プログラミングでこれを行う方法がわかりません。あなたの経験を提案し、私を導いてください。

また、Spring や Hibernate などの多くのフレームワークが、未チェックの例外でチェック済みの例外をラップすることにより、未チェックの例外に向かって進んでいるのを見てきました。

議論の余地があるトピックであるため、チェック済み例外の使用を提案しないでください。申し訳ありません。

4

3 に答える 3

1

あなたがしたいことは、Thread.setDefaultUncaughtExceptionHandler()と のThread.setUncaughtExceptionHandler()機能を使用することです。

Threadレベル、レベル、レベルでThreadGroupハンドラーを設定できRuntimeます。

キャッチされない例外が原因でスレッドが突然終了し、そのスレッドに対して他のハンドラーが定義されていない場合に呼び出されるデフォルトのハンドラーを設定します。キャッチされない例外処理は、最初にスレッドによって制御され、次にスレッドの ThreadGroup オブジェクトによって制御され、最後にデフォルトのキャッチされない例外ハンドラーによって制御されます。スレッドに明示的なキャッチされていない例外ハンドラーが設定されておらず、スレッドのスレッド グループ (親スレッド グループを含む) がその uncaughtException メソッドを特殊化していない場合、デフォルト ハンドラーの uncaughtException メソッドが呼び出されます。

デフォルトのキャッチされていない例外ハンドラーを設定することにより、アプリケーションは、システムが提供する「デフォルト」の動作を既に受け入れるスレッドに対して、キャッチされていない例外を処理する方法 (特定のデバイスまたはファイルへのログ記録など) を変更できます。

デフォルトのキャッチされない例外ハンドラーは、無限再帰を引き起こす可能性があるため、通常、スレッドの ThreadGroup オブジェクトに従うべきではないことに注意してください。

これは、例外のソースに関連付けられているスタック トレースを失うことなく、一般的な方法で致命的なエラーを処理するための最良の方法です。

于 2013-09-11T08:46:57.317 に答える
0

非チェック例外は通常、回復不能な例外用に予約されています。

ただし、チェックされていない例外をキャッチする必要がある場合は、すべての例外が Throwable を拡張するため、スレッドの Run メソッドで Throwable をキャッチするだけで済みます。

しかし、このレベルでキャッチするまでには、回復することはできません。あなたができる唯一のことは、それを記録することです。

于 2013-09-11T08:42:05.890 に答える