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
Barbara Streisandasal
2024-12-05 16:37:19824semak imbas

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>
<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!

Kenyataan:
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