Vorbehalt: Dies entspricht möglicherweise nicht Ihren Anforderungen, wenn Sie den Ausnahmemechanismus verwenden müssen.
Wenn ich Sie richtig verstehe, brauchen Sie die Ausnahme nicht wirklich zu überprüfen (Sie haben die Antwort angenommen, die eine ungeprüfte Ausnahme vorschlägt), also wäre ein einfaches Listenermuster passender?
Der Listener könnte im übergeordneten Thread leben, und wenn Sie die geprüfte Ausnahme im untergeordneten Thread abgefangen haben, können Sie den Listener einfach benachrichtigen.
Dies bedeutet, dass Sie eine Möglichkeit haben, zu enthüllen, dass dies geschieht (durch öffentliche Methoden), und mehr Informationen weitergeben können, als eine Ausnahme zulässt. Aber es bedeutet, dass es eine Kopplung (wenn auch eine lose) zwischen dem Eltern- und dem Kind-Thread geben wird. Es würde in Ihrer speziellen Situation davon abhängen, ob dies einen Vorteil gegenüber dem Umhüllen der geprüften Ausnahme mit einem unkontrollierten haben würde.
Hier ist ein einfaches Beispiel (ein Code von einer anderen Antwort geborgt):
public class ThingRunnable implements Runnable {
private SomeListenerType listener;
// assign listener somewhere
public void run() {
try {
while(iHaveMorePackets()) {
doStuffWithPacket();
}
} catch(Exception e) {
listener.notifyThatDarnedExceptionHappened(...);
}
}
}
Die Kupplung kommt von einem Objekt in dem übergeordneten Thread des Typs sein zu müssen SomeListenerType
.
Werfen Sie einen Blick auf folgende Antwort: [Festlegen einer Ausnahme von einem Thread fangen] [1] [1]: http://stackoverflow.com/questions/ 6546193/how-to-catch-a-exception-from-a-thread –