„Hallo, Amigo!
„Ich möchte Ihnen etwas Kleines, aber Interessantes erzählen.“
„Ich höre zu. Ich liebe Dinge, die klein und interessant sind.“
„Nun, Sie wissen, dass jedes Thread-Objekt eine run()-Methode hat. Und dass Sie es mit der start()-Methode in einem separaten Thread ausführen können.“
"Ja, natürlich."
„Aber stellen Sie sich nun diese Situation vor: Sie starten einen Thread, um eine Arbeit auszuführen, aber es wird eine Ausnahme ausgelöst und der Thread stoppt die Ausführung, weil er nicht weiß, was er tun soll. Müssten Sie nicht irgendwie über diesen Fehler Bescheid wissen?“
„Ich stimme zu. Ich müsste die Ausnahme, die im anderen laufenden Thread aufgetreten ist, irgendwie abfangen. Unterstützt Java das überhaupt?“
„Du beleidigst mich. Natürlich tut es das.“
„Die Entwickler von Java haben eine spezielle Schnittstelle namens UncaughtExceptionHandler erfunden. Hier erfahren Sie, wie Sie eine Ausnahme abfangen und behandeln, die in einem anderen Thread auftritt, wenn dieser Thread sie nicht abfängt:“
public class DownloadManager
{
public static void main(String[] args)
{
Thread thread = new DownloadThread();
thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler()
{
@Override
public void uncaughtException(Thread t, Throwable e)
{
}
});
thread.start();
}
„Das Thread-Objekt hat eine spezielle setUncaughtExceptionHandler- Methode. Sie müssen ihm ein Objekt übergeben, das die Thread.UncaughtExceptionHandler- Schnittstelle implementiert. Diese Schnittstelle hat nur eine Methode: uncaughtException(Thread t, Throwable e) . Dies ist die Methode, die aufgerufen wird das übergebene Objekt, wenn in der Ausführungsmethode eine nicht abgefangene Ausnahme auftritt.
„In meinem Beispiel oben deklariere ich einfach eine anonyme innere Klasse (rot hervorgehoben), die die Thread. Thread.UncaughtExceptionHandler -Schnittstelle implementiert. Und ich überschreibe ihre uncaughtException(Thread t, Throwable e) -Methode.“
„Wie Sie der Parameterliste der Methode entnehmen können, werden zwei Argumente übergeben: ein Verweis auf das Thread-Objekt, in dem die Ausnahme aufgetreten ist, und die Ausnahme selbst, die als Throwable e übergeben wird.“
„Nun, warum brauche ich die Thread-Variable t? Wissen wir nicht bereits, in welchen Thread wir ein Thread.UncaughtExceptionHandler- Objekt einfügen?“
„Sie haben dies getan, damit Sie einen universellen Handler für diese Situationen schreiben können. Das heißt, Sie können ein einzelnes Objekt erstellen und es an Dutzende verschiedener Threads übergeben. Dann gibt Ihnen die Methode uncaughtException( Thread t, Throwable e) immer einen Verweis auf das Thread-Objekt, bei dem die Ausnahme aufgetreten ist.“
„Darüber hinaus können Sie Dutzende Threads erstellen, beispielsweise in einer Schleife, um bestimmte Aufgaben auszuführen. Im Allgemeinen wird dieser Verweis auf das Thread-Objekt nicht überflüssig sein. Das verspreche ich Ihnen.“
„Ich glaube dir. Du hast dich nie geirrt.“
GO TO FULL VERSION