Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Menangkap Pengecualian yang Dilemparkan oleh Benang di Jawa?

Bagaimanakah Saya Boleh Menangkap Pengecualian yang Dilemparkan oleh Benang di Jawa?

DDD
Lepaskan: 2024-12-04 00:26:10
asal
879 orang telah melayarinya

How Can I Catch Exceptions Thrown by Threads in Java?

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

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

Dalam kod yang diubah suai ini:

  1. Kami mencipta tika baharu bagi seorang UncaughtExceptionHandler.
  2. Kami menetapkan UncaughtExceptionHandler kepada urutan kanak-kanak menggunakan kaedah setUncaughtExceptionHandler().
  3. Apabila pengecualian yang tidak ditangkap berlaku dalam urutan kanak-kanak, kaedah uncaughtException() pengendali kami digunakan, membolehkan kami mengendalikan pengecualian dengan anggun.

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan