Rumah > Java > javaTutorial > Cara menggunakan pengecualian Java mengendalikan UncaughtExceptionHandler

Cara menggunakan pengecualian Java mengendalikan UncaughtExceptionHandler

PHPz
Lepaskan: 2023-04-14 21:55:01
ke hadapan
2056 orang telah melayarinya

Pengendalian pengecualian

Pengecualian tidak tertangkap benang UncaughtException memerlukan UncaughtZExceptionHandler untuk mengendalikan

Jadi mengapa anda perlu menggunakan UncaughtZExceptionHandler?

  • Benang utama boleh menangkap benang dengan mudah, tetapi sub-benang tidak boleh

  • Seperti yang dapat dilihat daripada kod di bawah, walaupun jika sub-benang membuang pengecualian, utas utama tidak akan Terjejas

public class ChildException implements Runnable{
    public static void main(String[] args) {
        new Thread(new ChildException()).start();
        for (int i = 0; i < 10; i++) {
            System.out.println(i);
        }
    }
    @Override
    public void run() {
        throw new RuntimeException();
    }
}
/*
* Exception in thread "Thread-0" java.lang.RuntimeException
   at com.jx.JavaTest.Thread.Exception.ChildException.run(ChildException.java:14)
   at java.lang.Thread.run(Thread.java:748)
0
1
2
3
4
5
6
7
8
9
* */
Salin selepas log masuk
  • Seperti yang dapat dilihat daripada kod di bawah, walaupun anda mahu menggunakan menangkap untuk menangkap pengecualian benang kanak-kanak, ia tidak berguna

  • cuba menangkap adalah untuk utas utama, tiada cara untuk menangkap pengecualian dalam sub-benang

public class CantCatch implements Runnable {
    public static void main(String[] args) throws InterruptedException {
        try {
            new Thread(new CantCatch(), "thread0").start();
            Thread.sleep(300);
            new Thread(new CantCatch(), "thread1").start();
            Thread.sleep(300);
            new Thread(new CantCatch(), "thread2").start();
            Thread.sleep(300);
            new Thread(new CantCatch(), "thread3").start();
            Thread.sleep(300);
        } catch (RuntimeException e) {
            System.out.println("catch");
        }
    }
    @Override
    public void run() {
        throw new RuntimeException();
    }
}
/*
* Exception in thread "thread0" java.lang.RuntimeException
   at com.jx.JavaTest.Thread.Exception.CantCatch.run(CantCatch.java:22)
   at java.lang.Thread.run(Thread.java:748)
Exception in thread "thread1" java.lang.RuntimeException
   at com.jx.JavaTest.Thread.Exception.CantCatch.run(CantCatch.java:22)
   at java.lang.Thread.run(Thread.java:748)
Exception in thread "thread2" java.lang.RuntimeException
   at com.jx.JavaTest.Thread.Exception.CantCatch.run(CantCatch.java:22)
   at java.lang.Thread.run(Thread.java:748)
Exception in thread "thread3" java.lang.RuntimeException
   at com.jx.JavaTest.Thread.Exception.CantCatch.run(CantCatch.java:22)
   at java.lang.Thread.run(Thread.java:748)
Process finished with exit code 0
* */
Salin selepas log masuk

Pengecualian boleh ditangkap dengan kaedah cuba tangkap dalam larian, tetapi ia sangat menyusahkan Kerana anda perlu mencuba tangkapan secara manual

UncaughtExceptionHandler

Sesuaikan UncaughtExceptionHandler

<. 🎜>
public class MyUncaughtHandler implements Thread.UncaughtExceptionHandler{
    private String name;
    public MyUncaughtHandler(String name) {
        this.name = name;
    }
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        Logger logger = Logger.getAnonymousLogger();
        logger.log(Level.WARNING, "线程异常" + t.getName(), e);
        System.out.println(name + "捕获" + t.getName()+ e);
    }
}
Salin selepas log masuk
Gunakan kelas tersuai untuk menangkap pengecualian

Atas ialah kandungan terperinci Cara menggunakan pengecualian Java mengendalikan UncaughtExceptionHandler. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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