java 线程崩溃_java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理...
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异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理...相关推荐
- java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理
java语言中application异常退出和线程异常崩溃的捕获方法,并且在捕获的钩子方法中进行异常处理 参考文章: (1)java语言中application异常退出和线程异常崩溃的捕获方法,并且在 ...
- java中flush函数作用_Java语言中flush()函数作用及使用方法详解
最近在学习io流,发现每次都会出现flush()函数,查了一下其作用,起作用主要如下 //------–flush()的作用--------– 笼统且错误的回答: 缓冲区中的数据保存直到缓冲区满后才写 ...
- 在java语言中 ()方法是不可以继承的_Java 语言中,构造方法是不可以继承的。( )_学小易找答案...
[简答题]需求分析完整话术 [简答题] [单选题]适用于场地面积有限,集装箱吞吐量较大的水陆联运码头的起重机系统是( )系统 [单选题]利用叉车或半挂车.汽车承载货物,连同车辆一起开上开下船,到达目的 ...
- java中父类创建子类的语法_Java 语言中,所创建的子类都应有一个父类。( )_学小易找答案...
[判断题]一个类可以实现多个接口,接口可以实现"多重继承". ( ) [简答题]报价议价环节话术 [单选题]定义一个公有double型常量PI,哪一条语句最好?( ) [论述题]展 ...
- java里面赋值运算符解释_Java语言中,赋值运算符是双目运算符。
[判断题]Java编译器可以将Java字节码文件解释为二进制代码. [单选题] [单选题]为了能够使MCS-51单片机在正常工作中及时服务于多个外设,以下传送方式最适用的是(). [单选题]当使用AT ...
- double取两位小数_Java语言中:float、double数据类型在内存中是如何存储的
java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float ...
- java线程死亡_java – 如何暂停main()直到所有其他线程死亡?
在我的程序中,我在main()方法中创建了几个线程. main方法的最后一行是调用System.out.println(),在所有的线程都死了之前我不想调用它.我已经尝试在每个线程上调用Thread. ...
- java 异常 出口_java语言中,下列哪一子句是异常处理的出口java语言中,下列哪一子句是异常处理的出口Java语言中,下列哪一子句是异常处理的出口()。...
简述幼儿园选用人员应遵循的原则. 综采工作面上隅角必须要设置瓦斯.氧气传感器,及瓦斯.一氧化碳.氧气便携式报警仪,设置位置为:距顶板小于300mm,距帮大于500mm,距切顶线大于800mm.() 导 ...
- Java不是true值不变_Java语言中String a=a;String b=a; 为什么 a==b 值为 true?
目前排名比较靠前的答案都回答得很浅显易懂了. 我这里给你一个最可靠的理论依据(虽然比较晦涩). Java语言规范(JavaSE 1.8版本)章节3.10.5中对此作了规范,因此所有的Java语言编译. ...
最新文章
- python的web压力测试工具-pylot安装使用
- 甲骨文预言机平台(2)OCI 系统架构
- 已阻止应用程序访问图形硬件_玩转智能硬件之Jetson Nano(三)深度学习环境搭建...
- Brainstorm-the walkthrough example: Image Classification
- 【C#2.0】发挥匿名委托的威力!
- 吴恩达机器学习笔记二之多变量线性回归
- vimpython配色_超漂亮 vim 配置:space-vim
- 如何学习C语言,超详细的经验分享(学习笔记1--C语言的基本数据类型)
- [建议]我对博客园的发展的一点想法
- SDN+DPI文献阅读
- JSON字符串,JSON对象,JSON数组,实体类转换
- cad导出pdf_CAD手机看图软件中导出的CAD图纸为什么没有颜色?
- 基于机智云平台的微电网光伏模块数据采集装置的设计
- 为什么说CCSK是云安全从业人员必备证书之一
- hive:函数:sort_array函数解决collet_list列表排序混乱问题
- python中将字符变为大写_python如何把小写字母变成大写字母
- Sutton reinforcement learning _ Chapter 2 Multi-armed Bandits
- Flutter之国际化语言
- 给定一个 n X n 的矩阵,求它的转置矩阵
- 对话Nodebrick创始人:区块链游戏需要更多玩家,韩国开发者偏保守
热门文章
- Java 异常处理的 9 个最佳实践 1
- 那些没说出口的研发之痛,做与不做微服务的几大理由
- pytorch默认初始化_小白学PyTorch | 9 tensor数据结构与存储结构
- cpu性能排名学习笔记
- 无法从“const char [10]”转换为“char *”
- MobileNet-SSD
- class pybind11::module 没有成员 def
- python的nan,NaN,NAN
- python 获取ip
- requests模块--python发送http请求