"Szia Amigo!

– Valami apró, de érdekes dologról szeretnék mesélni.

"Figyelek. Szeretem a kicsi és érdekes dolgokat."

"Nos, tudod, hogy minden Thread objektumnak van egy run() metódusa. És hogy ezt külön szálon is végrehajthatod a start() metódussal."

"Természetesen."

"De most képzeld el ezt a helyzetet: elindítasz egy szálat, hogy végre hajtsanak végre valamilyen munkát, de kivételt dob, és a szál leáll, mert nem tudja, mit tegyen. Nem kellene valahogyan tudnod erről a hibáról?"

"Egyetértek. Valahogy el kell fognom a kivételt, ami a másik futó szálon történt. A Java még támogatja ezt?"

– Megsértesz. Persze, hogy így van.

"A Java készítői feltaláltak egy speciális interfészt UncaughtExceptionHandler néven. Így lehet elkapni és kezelni egy másik szálon előforduló kivételt, ha az a szál nem fogja meg:"

Példa
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();
}

"A Thread objektumnak van egy speciális setUncaughtExceptionHandler metódusa. Átadnia kell neki egy olyan objektumot, amely megvalósítja a Thread.UncaughtExceptionHandler felületet. Ennek az interfésznek csak egy metódusa van: uncaughtException(Thread t, Throwable e) . Ez a metódus lesz meghívva az átadott objektum, ha a futtatási metódusban nem elkapott kivétel fordul elő."

"A fenti példámban egyszerűen deklarálok egy névtelen belső osztályt (pirossal kiemelve), amely megvalósítja a Thread. Thread.UncaughtExceptionHandler felületet. És felülírom az uncaughtException(Thread t, Throwable e) metódust."

"Amint a metódus paraméterlistájából látható, két argumentum kerül átadásra: egy hivatkozás a Thread objektumra, ahol a kivétel előfordult, és maga a kivétel, amelyet Throwable e-ként adtunk át."

"Nos, miért van szükségem a t Thread változóra? Nem tudjuk már, hogy melyik szálba teszünk egy Thread.UncaughtExceptionHandler objektumot?"

"Ezt azért tették, hogy írhass egy univerzális kezelőt ezekre a helyzetekre. azaz létrehozhatsz egyetlen objektumot, és átadhatod több tucat különböző szálnak. Ezután az uncaughtException( Thread t, Throwable e) metódus mindig hivatkozást ad a Szálobjektum, ahol a kivétel történt."

"Sőt, több tucat szálat hozhat létre például egy ciklusban meghatározott feladatok végrehajtásához. Általában a Thread objektumra való hivatkozás nem lesz felesleges. Ezt megígérem."

"Hiszek neked. Soha nem tévedtél."