之前有同事说他的程序里的线程时常莫名退出,日志中没有任何异常信息。

目前我知道的可以获取线程异常信息的方法主要有

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线程莫名异常退出时,如何捕获异常信息相关推荐

  1. 安卓软件错误log_Android编程实现捕获程序异常退出时的错误log信息功能详解

    本文实例讲述了Android编程实现捕获程序异常退出时的错误log信息功能.分享给大家供大家参考,具体如下: 很多时候我们程序无缘无故的就挂掉了,让我们一头雾水,如果刚好我们在调试,那我们可以通过错误 ...

  2. java线程触发_java线程

    线程. 状态 新建状态(New): 当用 new 操作符创建一个线程时, 例如 new Thread(r),线程还没有开始运行,此时 线程处在新建状态. 当一个线程处于新生状态时,程序还没有开始运行线 ...

  3. java 线程机制_Java线程机制学习

    前面的文章中总结过Java中用来解决共享资源竞争导致线程不安全的几种常用方式: synchronized: ReentrantLock: ThreadLocal: 这些都是在简单介绍了基本用法的基础上 ...

  4. java线程分类_Java 线程类别

    Java 线程类别 守护线程和非守护线程 守护线程和非守护线程之前的唯一区别在于:是否阻止JVM的正常退出. JVM正常退出是与异常退出相对的概念,异常退出如调用System.exit(status) ...

  5. java 线程不足_Java 线程基础知识

    wait() 和notify().notifyAll() 这三个方法用于协调多个线程对共享数据的存取,所以必须在 Synchronized 语句块内使用这三个方法,否则会抛出错 IllegalMoni ...

  6. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  7. java 线程状态_JAVA线程漫谈:线程状态与状态转换解析

    线程使用方式 JDK线程的顶层抽象是Runnable接口,本质上,线程相关的类都是基于Runnable和Thread实现类实现. JDK API级别有不同的创建线程的方式,但本质是还是基于Runnab ...

  8. java+向前进一_Java 线程基础

    前言 线程并发系列文章: 熟练掌握线程原理与使用是程序员进阶的必经之路,网上很多关于Java线程的知识,比如多线程之间变量的可见性.操作的原子性,进而扩展出的Volatile.锁(CAS/Synchr ...

  9. java thread应用_JAVA线程应用Thread

    java线程学习: 基本概念: 当一个程序开启的时候,会启动一个进程,在进程中会开启线程,如果只有一个线程,这个线程就称为主线程.如果进程停止,会先杀死线程再退出! java线程类:Thread 方法 ...

最新文章

  1. 基于生成对抗网络(GAN)的人脸变形(附链接) | CSDN博文精选
  2. 第三次Python作业———林东
  3. 虚拟服务器备案流程,国内虚拟主机备案流程
  4. VTK:可视化之FrogSlice
  5. 318. 最大单词长度乘积 golang
  6. c语言用指针删除链表free,leetcode剑指 Offer 18(删除链表的节点)--C语言实现
  7. gradle构建springboot项目瘦身,外部依赖jar的终极方法
  8. sketch软件_Sketch制作交互流程图,哪种工具最高效?
  9. 2021年微信小程序应用开发大赛华南赛区获奖作品---《课室帮》上
  10. [c++] 使用 raylib + ODE(open dynamics engine) 制作一个简易牛顿摆
  11. oracle12c 环境需求,Oracle12C之环境准备工作
  12. Serverless 极致弹性解构在线游戏行业痛点,你有过迷茫吗
  13. 全志平台Android系统wifi模组rtl8188eu移植调试记录
  14. Android手机上,利用bat脚本模拟用户操作
  15. Jump Game Jump Game II
  16. 2021年西式面点师(中级)新版试题及西式面点师(中级)模拟试题
  17. 解决 java poi 导出Excel 无法打开问题
  18. 计算机四级office试题及答案,2014年计算机一级ms office试题及答案 47
  19. PHP开发B2C商城 微信小程序商城系统源码+数据库,轻量级前后端分离的电商系统,支持微信小程序 + H5+ 公众号 + APP
  20. 笔记本wifi热点设置

热门文章

  1. Sublime Text 2中的正则表达式搜索替换
  2. ViewPager PagerAdapter未更新视图
  3. html表示主题内容的标签是,HTML 基本标签
  4. 直接学python3_新手应该学python2还是python3?
  5. JavaScript里的父、子节点操作源码解析
  6. 获取当前时间以及模拟倒计时(Java)
  7. wangEditor关闭粘贴样式的过滤,解决小程序中xml溢出报错问题
  8. PCL之Ubuntu16.04下编译libfreenect2和PCL以支持KinectV2点云处理
  9. Eigen教程(9)之Reshape,Slicing介绍
  10. 数据库学习--主从复制