Java线程:Hook线程以及捕获线程执行非常

源代码 2024-10-5 15:05:36 106 0 来自 中国
一、捕获线程执行非常

Java为我们提供了一个 UncaughtExceptionHandler 接口,当线程在运行过程中出现非常时,会回调 UncaughtExceptionHandler 接口,从而得知是哪个线程在运行时堕落,以及出现了什么样的错误。
    // 设置回调接口    Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {        @Override        public void uncaughtException(Thread t, Throwable e) {        }    });当历程被启动的时候,执行Thread的 setDefaultUncaughtExceptionHandler 方法来监听历程内的非常。
固然,如果已经被       try { } catch (Exception e) { } 捕获的非常将不会被 uncaughtExceptionHandler 重复捕获。
二、Hook线程(注入钩子线程)

JVM历程的退出是由于JVM历程中没有生动的非保卫线程,大概收到了体系制止信号,向JVM步调注入一个Hook线程,在JVM历程退出的时候,Hook线程会启动执行,通过 Runtime 可以为 JVM 注入多个 Hook 线程。
    // 注入一个 Hook 线程    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {        @Override        public void run() {                    }    }));当步调退出时,会执行到该 Hook 线程。
Hook 线程可以注入多个,当步调主动退出或非常退出时,可以利用 Hook 线程做一些开释资源的操纵。
Hook 线程不要处置惩罚耗时操纵,否则会延伸步调退出的时间。
[本章完...]
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-10-18 16:54, Processed in 0.110429 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表