Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Menangani Pengecualian yang Dilemparkan daripada Benang Kanak-Kanak di Jawa?
Mengendalikan Pengecualian yang Dibuang daripada Benang
Dalam aplikasi berbilang benang, adalah penting untuk mengendalikan pengecualian yang dilemparkan oleh utas kanak-kanak dalam utas utama. Pertimbangkan senario berikut:
<br>Ujian kelas awam memanjangkan Thread {<br> public static void main(String[] args) melontar InterruptedException {</p> <pre class="brush:php;toolbar:false">Test t = new Test(); try { t.start(); t.join(); } catch (RuntimeException e) { System.out.println("** RuntimeException from main"); } System.out.println("Main stoped");
}
@Override
larian kekosongan awam() {
try { while (true) { System.out.println("** Started"); sleep(2000); throw new RuntimeException("exception from thread"); } } catch (RuntimeException e) { System.out.println("** RuntimeException from thread"); throw e; } catch (InterruptedException e) { }
}
}
Dalam contoh ini, pengecualian yang dilemparkan dalam urutan kanak-kanak tidak merebak ke urutan utama. Ini kerana Java tidak secara automatik mengaitkan pengecualian yang dilemparkan dalam benang dengan pengendali dalam utas utama.
Penyelesaian: Thread.UncaughtExceptionHandler
Untuk mengendalikan pengecualian daripada utas, satu boleh menggunakan Thread.UncaughtExceptionHandler. Antara muka ini menyediakan kaedah uncaughtException() yang dipanggil apabila pengecualian yang tidak ditangkap berlaku dalam urutan.
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() { System.out.println("Sleeping ..."); try { Thread.sleep(1000); } catch (InterruptedException e) { System.out.println("Interrupted."); } System.out.println("Throwing exception ..."); throw new RuntimeException(); } }; t.setUncaughtExceptionHandler(h); t.start();
Dengan menetapkan uncaughtExceptionHandler kepada urutan, sebarang pengecualian yang tidak ditangkap akan dikendalikan oleh pelaksanaan yang disediakan. Ini membolehkan urutan utama menangkap dan memproses pengecualian dengan anggun, memastikan pengendalian yang betul dan pelaporan ralat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menangani Pengecualian yang Dilemparkan daripada Benang Kanak-Kanak di Jawa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!