เพื่อน คุณช่วยกรุณาบอกฉันความแตกต่างระหว่างตัวสร้างและรหัสคงที่ได้ไหม

ทำไม " Thread.setDefaultUncaughtExceptionHandler" ไม่สามารถทำงานได้ในตัวสร้าง?

รหัสที่มา 1:

class MyUncaughtExceptionHandler implements
        Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.out.println("caught " + e.getMessage());
    }
}
public class CaughtExceptionThread extends Thread{

    static {
        Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
    }
}

รหัสที่มา 2:

class MyUncaughtExceptionHandler implements
        Thread.UncaughtExceptionHandler {
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.out.println("caught " + e.getMessage());
    }
}
public class CaughtExceptionThread extends Thread{

    public CaughtExceptionThread() {
        Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
    }
}

รหัสทดสอบ:

public class DefaultExceptionHandler extends CaughtExceptionThread{

    public static void main(String[] args) {
        ExecutorService es =
                Executors.newCachedThreadPool();
        es.execute(new ExceptionThread());
        es.shutdown();
    }
}

คำถามของฉันคือ ทำไมซอร์สโค้ด 1 ทำงาน แต่ซอร์สโค้ด 2 ไม่ทำงาน

ขอบคุณ!

ไม่พบคำตอบ