java线程异常终止_java线程莫名异常退出时,如何捕获异常信息
之前有同事说他的程序里的线程时常莫名退出,日志中没有任何异常信息。
目前我知道的可以获取线程异常信息的方法主要有
1、Future>和ScheduledFuture>的get()方法
2、JAVA1.5之后支持的UncaughtExceptionHandler
1 Thread thread = new Thread(() -> {run方法内的代码块});2 thread.start();3 thread.setUncaughtExceptionHandler((t, e) ->{4 Logger.error(t.getName() + " ERRORt" +e.getMessage());5 });
() -> {}是java1.8新特性中的lambda表达式
--------------------------------------------------------------------------------------------------------------------------------------------------------
然而,程序运行中可能会有不可预知错误,比如OOM(内存溢出)等系统错误,这种错误在java中属于Error类,我们常用的都是Exception的子类,是捕获不到这种异常的。
先看看一下java中异常的类图:
RunTimeException是运行时异常,在编译时不会被发现,比如除数为0;
Error前面说了,是系统级的错误,与java没关系,所以java认为不需要捕获这种异常,因为遇到这种异常说明系统有错误,已经无法支持程序正常运行,程序应该终止,没必要捕获和处理了。
但是对于我们开发人员和维护人员来说,我们有必要知道这些错误的详细信息,来维护系统错误。比如,发生了OOM,我们可以看看系统里各进程占用内存情况,根据情况做整改,有可能是某程序代码不合理,导致内存无限被占用。
Throwable就是这所有异常的父类了。
所以,我在同事的线程的run方法里捕获Throwable异常来获取异常信息。
1 @Override2 public voidrun() {3 try{4 ...5 } catch(Throwable t) {6 Logger.error("xx task error!", t);7 }8 }
但,据说Throwable性能不佳,所以不推荐在没必要的地方全都使用。小生目前对这方面还没有研究,待有所了解后再补充说明。
java线程异常终止_java线程莫名异常退出时,如何捕获异常信息相关推荐
- 安卓软件错误log_Android编程实现捕获程序异常退出时的错误log信息功能详解
本文实例讲述了Android编程实现捕获程序异常退出时的错误log信息功能.分享给大家供大家参考,具体如下: 很多时候我们程序无缘无故的就挂掉了,让我们一头雾水,如果刚好我们在调试,那我们可以通过错误 ...
- java线程触发_java线程
线程. 状态 新建状态(New): 当用 new 操作符创建一个线程时, 例如 new Thread(r),线程还没有开始运行,此时 线程处在新建状态. 当一个线程处于新生状态时,程序还没有开始运行线 ...
- java 线程机制_Java线程机制学习
前面的文章中总结过Java中用来解决共享资源竞争导致线程不安全的几种常用方式: synchronized: ReentrantLock: ThreadLocal: 这些都是在简单介绍了基本用法的基础上 ...
- java线程分类_Java 线程类别
Java 线程类别 守护线程和非守护线程 守护线程和非守护线程之前的唯一区别在于:是否阻止JVM的正常退出. JVM正常退出是与异常退出相对的概念,异常退出如调用System.exit(status) ...
- java 线程不足_Java 线程基础知识
wait() 和notify().notifyAll() 这三个方法用于协调多个线程对共享数据的存取,所以必须在 Synchronized 语句块内使用这三个方法,否则会抛出错 IllegalMoni ...
- java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...
导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...
- java 线程状态_JAVA线程漫谈:线程状态与状态转换解析
线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...
- java+向前进一_Java 线程基础
前言 线程并发系列文章: 熟练掌握线程原理与使用是程序员进阶的必经之路,网上很多关于Java线程的知识,比如多线程之间变量的可见性.操作的原子性,进而扩展出的Volatile.锁(CAS/Synchr ...
- java thread应用_JAVA线程应用Thread
java线程学习: 基本概念: 当一个程序开启的时候,会启动一个进程,在进程中会开启线程,如果只有一个线程,这个线程就称为主线程.如果进程停止,会先杀死线程再退出! java线程类:Thread 方法 ...
最新文章
- 基于生成对抗网络(GAN)的人脸变形(附链接) | CSDN博文精选
- 第三次Python作业———林东
- 虚拟服务器备案流程,国内虚拟主机备案流程
- VTK:可视化之FrogSlice
- 318. 最大单词长度乘积 golang
- c语言用指针删除链表free,leetcode剑指 Offer 18(删除链表的节点)--C语言实现
- gradle构建springboot项目瘦身,外部依赖jar的终极方法
- sketch软件_Sketch制作交互流程图,哪种工具最高效?
- 2021年微信小程序应用开发大赛华南赛区获奖作品---《课室帮》上
- [c++] 使用 raylib + ODE(open dynamics engine) 制作一个简易牛顿摆
- oracle12c 环境需求,Oracle12C之环境准备工作
- Serverless 极致弹性解构在线游戏行业痛点,你有过迷茫吗
- 全志平台Android系统wifi模组rtl8188eu移植调试记录
- Android手机上,利用bat脚本模拟用户操作
- Jump Game Jump Game II
- 2021年西式面点师(中级)新版试题及西式面点师(中级)模拟试题
- 解决 java poi 导出Excel 无法打开问题
- 计算机四级office试题及答案,2014年计算机一级ms office试题及答案 47
- PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP
- 笔记本wifi热点设置
热门文章
- Sublime Text 2中的正则表达式搜索替换
- ViewPager PagerAdapter未更新视图
- html表示主题内容的标签是,HTML 基本标签
- 直接学python3_新手应该学python2还是python3?
- JavaScript里的父、子节点操作源码解析
- 获取当前时间以及模拟倒计时(Java)
- wangEditor关闭粘贴样式的过滤,解决小程序中xml溢出报错问题
- PCL之Ubuntu16.04下编译libfreenect2和PCL以支持KinectV2点云处理
- Eigen教程(9)之Reshape,Slicing介绍
- 数据库学习--主从复制