警告: 例外メカニズムを使用する必要がある場合、これはニーズを満たさない可能性があります。
私があなたを正しく理解していれば、実際には例外をチェックする必要はありません (チェックされていない例外を示唆する回答を受け入れました) ので、単純なリスナーパターンの方が適切でしょうか?
リスナーは親スレッドに存在する可能性があり、子スレッドでチェック例外をキャッチしたら、リスナーに通知するだけです。
これは、(パブリック メソッドを介して) これが発生することを公開する方法があり、例外が許可するよりも多くの情報を渡すことができることを意味します。しかし、これは、親スレッドと子スレッドの間に (緩いものではありますが) 結合があることを意味します。これがチェックされた例外をチェックされていない例外でラップするよりも利点があるかどうかは、特定の状況によって異なります。
簡単な例を次に示します(別の回答から借用したコードもあります):
public class ThingRunnable implements Runnable {
private SomeListenerType listener;
// assign listener somewhere
public void run() {
try {
while(iHaveMorePackets()) {
doStuffWithPacket();
}
} catch(Exception e) {
listener.notifyThatDarnedExceptionHappened(...);
}
}
}
カップリングは、親スレッド内のオブジェクトのタイプである必要がありSomeListenerType
ます。