Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Menangani Pengecualian yang Dilemparkan daripada Benang Kanak-Kanak di Jawa?

Bagaimanakah Saya Boleh Menangani Pengecualian yang Dilemparkan daripada Benang Kanak-Kanak di Jawa?

Barbara Streisand
Lepaskan: 2024-12-05 16:37:19
asal
823 orang telah melayarinya

How Can I Handle Exceptions Thrown from Child Threads in Java?

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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");
Salin selepas log masuk

}

@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) {

}
Salin selepas log masuk

}
}

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();
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan