Dalam program multi-thread Java, semua thread tidak diperbolehkan membuang pengecualian yang dicentang yang tidak tertangkap, yang berarti bahwa setiap thread harus menangani pengecualian yang dicentangnya sendiri. Hal ini dibatasi oleh deklarasi metode java.lang.Runnable.run() (karena tidak ada bagian pengecualian throw pada deklarasi metode ini). Namun, thread mungkin masih memunculkan pengecualian yang tidak dicentang. Ketika pengecualian tersebut dilempar, thread akan dihentikan, dan thread utama serta thread lainnya tidak akan terpengaruh sama sekali, dan pengecualian yang dilempar oleh thread tertentu tidak akan dirasakan. semua (juga dikatakan bahwa pengecualian ini tidak dapat ditangkap sama sekali). Desain JVM ini berasal dari konsep: "Thread adalah fragmen kode yang dieksekusi secara independen. Masalah thread harus diselesaikan oleh thread itu sendiri, bukan didelegasikan ke luar." Berdasarkan konsep desain ini, di Java, pengecualian Metode thread (apakah dicentang atau pengecualian yang tidak dicentang) harus dicoba ditangkap dan ditangani dalam batas kode thread (dalam metode yang dijalankan).
Tetapi jika thread tidak mencoba menangkap pengecualian yang tidak dicentang dengan sendirinya, dan kita ingin menangkap dan menangani pengecualian ini di luar batas kode thread (di luar metode run), Java memberi kita cara untuk menangkap pengecualian ketika pengecualian terjadi di dalam thread. Mekanisme panggilan balik untuk menangani pengecualian di luar batas kode thread adalah metode setUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) yang disediakan oleh objek Thread.
Dengan menyetel UncaughtExceptionHandler untuk thread melalui metode ini, Anda dapat memastikan bahwa ketika pengecualian terjadi di thread, pengecualian tersebut dapat ditangani dengan memanggil kembali metode public void uncaughtException(Thread t, Throwable e) dari antarmuka UncaughtExceptionHandler atau tujuannya adalah agar dapat digunakan di thread Di luar batas kode (di luar metode run() Thread), ada tempat untuk menangani pengecualian yang tidak tertangkap. Namun yang harus sangat jelas adalah bahwa meskipun pengecualian ditangani dalam metode panggilan balik, metode panggilan balik tersebut masih berada di thread yang memunculkan pengecualian saat dijalankan!
Dibandingkan dengan metode di atas, ada metode pemrograman lain yang dapat digunakan sebagai referensi. Artinya, terkadang pemanggil thread utama mungkin hanya ingin mengetahui pengecualian apa yang terjadi selama eksekusi sub-thread, tetapi mungkin belum tentu menanganinya atau menanganinya segera. Kemudian Metode memulai thread anak dapat mengumpulkan contoh pengecualian yang dilemparkan oleh thread anak dan mengembalikannya ke pemanggil sebagai Daftar Pengecualian, dan pemanggil dapat memutuskan bagaimana merespons sesuai dengan situasi abnormal. . Namun, penting untuk dicatat bahwa thread anak telah dihentikan saat ini.