1、application应用程序注入自定义钩子程序

java语言本身提供一个很好的Runtime类,可以使我们很好的获取运行时信息。其中有一个方法是 public void addShutdownHook(Thread hook) ,通过这个方法我们可以获取主线程或者说application项目被kill杀死获取异常退出时候的钩子事件。我们一般会在这个事件中处理一些释放资源,通知,报警等信息,这样我们就可以不用翻log日志了。

注意:对于kill -9 这样暴力结束应用程序的方式不起作用,所以一般服务器上停止正在运行的服务很忌讳使用kill -9 命令进行操作;

具体实现代码如下:

public class ApplicationHook {

public static void main(String[] args) {

Runtime.getRuntime().addShutdownHook(new Thread(()->{

System.out.println(Thread.currentThread().getName() + "this application will close...");

},"thread-su-hook"));

new Thread(()->{

do{

System.out.println(Thread.currentThread().getName() + " is working ...");

try {

Thread.sleep(1000L);

} catch (InterruptedException e) {

e.printStackTrace();

}

}while(true);

},"thread-su-0").start();

}

}

输出结果:

2、Thread线程的异常抛出一般都是在run方法内部进行消化,但是对于runtime的异常,Thread线程显得无能为力,所以Thread类本身提供了一个方法来实现对于特殊的runtime错误进行捕获setUncaughtExceptionHandler ;

具体代码如下:

public class ThreadHook {

public static void main(String[] args) {

final int a = 100;

final int b = 0;

Thread t = new Thread(()->{

int count = 0;

Optional.of(Thread.currentThread().getName() + " is begin work...").ifPresent(System.out::println);

do{

count++;

Optional.of(Thread.currentThread().getName() + " count is : " + count).ifPresent(System.out::println);

try {

Thread.sleep(1000L);

} catch (InterruptedException e) {

e.printStackTrace();

}

}while (count<5);

Optional.of(Thread.currentThread().getName() + " is end work...").ifPresent(System.out::println);

System.out.println(a/b);

});

t.setUncaughtExceptionHandler((thread,e)->{

System.out.println(thread.getName() + " is custom uncaught exception ...");

});

t.start();

}

输入结果:

希望能帮到需要的朋友,谢谢。。。

java 线程崩溃_java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理...相关推荐

  1. java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理

    java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理 参考文章: (1)java语言中application异常退出和线程异常崩溃的捕获方法,并且在 ...

  2. java中flush函数作用_Java语言中flush()函数作用及使用方法详解

    最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...

  3. 在java语言中 ()方法是不可以继承的_Java 语言中,构造方法是不可以继承的。( )_学小易找答案...

    [简答题]需求分析完整话术 [简答题] [单选题]适用于场地面积有限,集装箱吞吐量较大的水陆联运码头的起重机系统是( )系统 [单选题]利用叉车或半挂车.汽车承载货物,连同车辆一起开上开下船,到达目的 ...

  4. java中父类创建子类的语法_Java 语言中,所创建的子类都应有一个父类。( )_学小易找答案...

    [判断题]一个类可以实现多个接口,接口可以实现"多重继承". ( ) [简答题]报价议价环节话术 [单选题]定义一个公有double型常量PI,哪一条语句最好?( ) [论述题]展 ...

  5. java里面赋值运算符解释_Java语言中,赋值运算符是双目运算符。

    [判断题]Java编译器可以将Java字节码文件解释为二进制代码. [单选题] [单选题]为了能够使MCS-51单片机在正常工作中及时服务于多个外设,以下传送方式最适用的是(). [单选题]当使用AT ...

  6. double取两位小数_Java语言中:float、double数据类型在内存中是如何存储的

    java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float ...

  7. java线程死亡_java – 如何暂停main()直到所有其他线程死亡?

    在我的程序中,我在main()方法中创建了几个线程. main方法的最后一行是调用System.out.println(),在所有的线程都死了之前我不想调用它.我已经尝试在每个线程上调用Thread. ...

  8. java 异常 出口_java语言中,下列哪一子句是异常处理的出口java语言中,下列哪一子句是异常处理的出口Java语言中,下列哪一子句是异常处理的出口()。...

    简述幼儿园选用人员应遵循的原则. 综采工作面上隅角必须要设置瓦斯.氧气传感器,及瓦斯.一氧化碳.氧气便携式报警仪,设置位置为:距顶板小于300mm,距帮大于500mm,距切顶线大于800mm.() 导 ...

  9. Java不是true值不变_Java语言中String a=a;String b=a; 为什么 a==b 值为 true?

    目前排名比较靠前的答案都回答得很浅显易懂了. 我这里给你一个最可靠的理论依据(虽然比较晦涩). Java语言规范(JavaSE 1.8版本)章节3.10.5中对此作了规范,因此所有的Java语言编译. ...

最新文章

  1. python的web压力测试工具-pylot安装使用
  2. 甲骨文预言机平台(2)OCI 系统架构
  3. 已阻止应用程序访问图形硬件_玩转智能硬件之Jetson Nano(三)深度学习环境搭建...
  4. Brainstorm-the walkthrough example: Image Classification
  5. 【C#2.0】发挥匿名委托的威力!
  6. 吴恩达机器学习笔记二之多变量线性回归
  7. vimpython配色_超漂亮 vim 配置:space-vim
  8. 如何学习C语言,超详细的经验分享(学习笔记1--C语言的基本数据类型)
  9. [建议]我对博客园的发展的一点想法
  10. SDN+DPI文献阅读
  11. JSON字符串,JSON对象,JSON数组,实体类转换
  12. cad导出pdf_CAD手机看图软件中导出的CAD图纸为什么没有颜色?
  13. 基于机智云平台的微电网光伏模块数据采集装置的设计
  14. 为什么说CCSK是云安全从业人员必备证书之一
  15. hive:函数:sort_array函数解决collet_list列表排序混乱问题
  16. python中将字符变为大写_python如何把小写字母变成大写字母
  17. Sutton reinforcement learning _ Chapter 2 Multi-armed Bandits
  18. Flutter之国际化语言
  19. 给定一个 n X n 的矩阵,求它的转置矩阵
  20. 对话Nodebrick创始人:区块链游戏需要更多玩家,韩国开发者偏保守

热门文章

  1. Java 异常处理的 9 个最佳实践 1
  2. 那些没说出口的研发之痛,做与不做微服务的几大理由
  3. pytorch默认初始化_小白学PyTorch | 9 tensor数据结构与存储结构
  4. cpu性能排名学习笔记
  5. 无法从“const char [10]”转换为“char *”
  6. MobileNet-SSD
  7. class pybind11::module 没有成员 def
  8. python的nan,NaN,NAN
  9. python 获取ip
  10. requests模块--python发送http请求