Java線程<第四篇>:Hook線程以及捕獲線程執(zhí)行異常

一、捕獲線程執(zhí)行異常

Java為我們提供了一個 UncaughtExceptionHandler 接口,當(dāng)線程在運(yùn)行過程中出現(xiàn)異常時,會回調(diào) UncaughtExceptionHandler 接口,從而得知是哪個線程在運(yùn)行時出錯,以及出現(xiàn)了什么樣的錯誤。

    // 設(shè)置回調(diào)接口
    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
        @Override
        public void uncaughtException(Thread t, Throwable e) {
        }
    });

當(dāng)進(jìn)程被啟動的時候,執(zhí)行Thread的 setDefaultUncaughtExceptionHandler 方法來監(jiān)聽進(jìn)程內(nèi)的異常。

當(dāng)然,如果已經(jīng)被 try { } catch (Exception e) { } 捕獲的異常將不會被 uncaughtExceptionHandler 重復(fù)捕獲。

二、Hook線程(注入鉤子線程)

JVM進(jìn)程的退出是由于JVM進(jìn)程中沒有活躍的非守護(hù)線程,或者收到了系統(tǒng)中斷信號,向JVM程序注入一個Hook線程,在JVM進(jìn)程退出的時候,Hook線程會啟動執(zhí)行,通過 Runtime 可以為 JVM 注入多個 Hook 線程。

    // 注入一個 Hook 線程
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
        @Override
        public void run() {
            
        }
    }));

當(dāng)程序退出時,會執(zhí)行到該 Hook 線程。

Hook 線程可以注入多個,當(dāng)程序主動退出或異常退出時,可以利用 Hook 線程做一些釋放資源的操作。

Hook 線程不要處理耗時操作,否則會延長程序退出的時間。

[本章完...]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容