Menangkap Pengecualian daripada Benang dalam Java
Dalam aplikasi berbilang benang, mengurus pengecualian yang dilemparkan dalam urutan berbeza boleh menjadi satu cabaran. Pertimbangkan senario di mana kelas utama memulakan urutan baharu dan cuba menangkap sebarang pengecualian masa jalan yang dijana olehnya.
// Original Code public class CatchThreadException { public static void main(String[] args) throws InterruptedException { Thread t = new Thread() { @Override public void run() { throw new RuntimeException("Exception from thread"); } }; try { t.start(); t.join(); } catch (RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stopped"); } }
Dalam kod ini, utas utama menunggu urutan anak selesai menggunakan join() kaedah. Walau bagaimanapun, apabila utas kanak-kanak melemparkan pengecualian, utas utama tidak menangkapnya.
Pengendali Pengecualian Tidak Ditangkap untuk Benang
Untuk menangani isu ini, Java menyediakan Benang .UncaughtExceptionHandler antara muka. Dengan melaksanakan antara muka ini dan memberikannya pada urutan, anda boleh mengendalikan pengecualian yang tidak ditangkap yang dilemparkan dalam urutan itu.
// Using Uncaught Exception Handler public class CatchThreadException { public static void main(String[] args) throws InterruptedException { Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread th, Throwable ex) { System.out.println("Uncaught exception: " + ex); } }; Thread t = new Thread() { @Override public void run() { throw new RuntimeException("Exception from thread"); } }; t.setUncaughtExceptionHandler(h); t.start(); t.join(); System.out.println("Main stopped"); } }
Dalam kod yang diubah suai ini:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangkap Pengecualian yang Dilemparkan oleh Benang di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!