Hook线程和捕获线程执行异常

2018-12-25  本文已影响0人  程序设计法师

在Thread中有四种处理运行时异常的API

没有向线程注入UncaughtExceptionHandler回调接口的情况下,线程出现了异常又将如何处理?
Hook线程介绍

Jvm进程的退出是由于Jvm进程中没有活跃的非守护线程,或者收到了系统中断信号,向Jvm程序中注入了一个Hook线程,在Jvm进程退出的时候,Hook线程会启动执行,通过Runtime可以为Jvm注入多个Hook线程,如下:

public class HookThread {
    public static void main(String[] args){
        //为应用程序注入钩子线程
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("The hook Thread 1 is Running");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("The hook Thread 1 will exit");
            }
        }));
        Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("The hook Thread 2 is Running");
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("The hook Thread 2 will exit");
            }
        }));
        System.out.println("The Program will is stopping....");
    }
}
The Program will is stopping....
The hook Thread 2 is Running
The hook Thread 1 is Running
The hook Thread 1 will exit
The hook Thread 2 will exit

给java程序注入了两个hook线程,在main线程中结束,也就是Jvm中没有了活动的非守护线程,Jvm进程即将退出时,两个Hook线程会被启动并且运行。

上一篇 下一篇

猜你喜欢

热点阅读