"Hej, Amigo!

"Jeg vil gerne fortælle dig om noget lille, men interessant."

"Jeg lytter. Jeg elsker ting, der er små og interessante."

"Nå, du ved, at hvert Thread-objekt har en run()-metode. Og at du kan udføre den på en separat tråd ved hjælp af start()-metoden."

"Ja selvfølgelig."

"Men forestil dig nu denne situation: du starter en tråd for at udføre noget arbejde, men en undtagelse bliver kastet, og tråden holder op med at køre, fordi den ikke ved, hvad den skal gøre. Behøver du ikke at vide om denne fejl på en eller anden måde?"

"Jeg er enig. Jeg bliver nødt til på en eller anden måde at fange undtagelsen, der opstod på den anden kørende tråd. Understøtter Java overhovedet det?"

"Du fornærmer mig. Selvfølgelig gør det det."

"Javas skabere opfandt en speciel grænseflade kaldet UncaughtExceptionHandler. Sådan fanges og håndteres en undtagelse, der opstår på en anden tråd, hvis den tråd ikke fanger den:"

Eksempel
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();
}

"Thread-objektet har en speciel setUncaughtExceptionHandler- metode. Du skal sende det et objekt, der implementerer Thread.UncaughtExceptionHandler -grænsefladen. Denne grænseflade har kun én metode: uncaughtException(Thread t, Throwable e) . Dette er den metode, der vil blive kaldt på det beståede objekt, hvis en ufanget undtagelse forekommer i kørselsmetoden."

"I mit eksempel ovenfor erklærer jeg simpelthen en anonym indre klasse (fremhævet med rødt), der implementerer tråden. Thread.UncaughtExceptionHandler -grænsefladen. Og jeg tilsidesætter dens uncaughtException(Thread t, Throwable e) metode."

"Som du kan se fra metodens parameterliste, vil to argumenter blive videregivet: en reference til Thread-objektet, hvor undtagelsen forekom, og selve undtagelsen, der sendes som Throwable e."

"Nå, hvorfor har jeg brug for trådvariablen t? Ved vi ikke allerede, hvilken tråd vi lægger et Thread.UncaughtExceptionHandler- objekt i?"

"De gjorde dette, så du kan skrive en universel handler til disse situationer. dvs. du kan oprette et enkelt objekt og videregive det til snesevis af forskellige tråde. Så giver uncaughtException( Thread t, Throwable e) -metoden dig altid en reference til Trådobjekt, hvor undtagelsen fandt sted."

"Hvad mere er, kan du oprette snesevis af tråde, for eksempel i en loop for at udføre specifikke opgaver. Generelt vil denne henvisning til trådobjektet ikke være overflødig. Det lover jeg dig."

"Jeg tror på dig. Du har aldrig taget fejl."