Java子线程异常及异常处理
最近使用线程池时,了解到了在子线程中抛出异常,主线程的处理方式。
Java中抛出 Exception 时必须使用 try..catch 块处理,但是抛出 RuntimeException 和 Error 时可以不使用 try..catch 块来处理,但是会导致线程中断。如下为抛出RuntimeException代码示例:
public class ChildThread implements Runnable{
@Override public void run() {
System.out.println("进入子线程");
throw new TestException();
}
}
class TestException extends RuntimeException{
public TestException(){
super("我是Exception");
}
}
但是抛出Exception时会要求处理:
在子线程中如果抛出异常的话,主线程是不会感受到这个异常的,并且也不能通过 try..catch 来捕获这个异常,但是如果子线程是继承了 Thread 的话是可以通过 Thread.setUncaughtExceptionHandler 方法来捕获到这个异常并进行处理的。如下为主线程捕获子线程异常代码示例:
public class ThreadTest {
public static void main(String[] args) {
new ThreadThread().setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { System.out.println(t.getName()+" "+e.getMessage());
}
});
System.out.println("主线程完成");
}
} class ThreadThread extends Thread {@Override public void run(){
System.out.println("ASDASDASD");
}
}
Java子线程异常及异常处理相关推荐
- Java子线程中的异常处理(通用)
Java子线程中的异常处理(通用) 参考文章: (1)Java子线程中的异常处理(通用) (2)https://www.cnblogs.com/toplist/p/7594557.html 备忘一下.
- java 异常处理线程_转:Java子线程中的异常处理(通用)
在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了.那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相 ...
- java线程带来的异常,java多线程练习之捕获子线程异常例子
本文章给大家介绍java多线程练习之捕获子线程异常一个实例,希望对大家会有所帮助. java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己 ...
- java 线程 try catch_Java子线程中的异常处理(通用)
在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了.那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相 ...
- JAVA Thread线程异常监控
一.场景描述:单线程程序可以用try...catch捕获程序的异常,而在多线程程序的时候是无法使用try...catch捕获. 示例1:多线程发生异常,无法使用try...catch捕获问题 publ ...
- java 子线程退出_java – 在子线程完成执行之前主线程将退出吗?
我读了2篇文章 在上面的文章中,在"线程终止"段中,它在Red中声明"如果父线程终止,它的所有子线程也会终止". 在上面的文章中,该页面的最后一行指出" ...
- python捕捉线程错误_python 主线程捕获子线程异常
最近,在做一个项目时遇到的了一个问题,主线程无法捕获子线程中抛出的异常. 先看一个线程类的定义 ''' Created on Oct 27, 2015 @author: wujz ''' import ...
- Java-主线程捕获子线程异常并回滚子线程及主线程
最近有个需求-当删除旧数据然后保存新数据时,只有删除旧数据成功同时保存新数据成功才可以不然的话就回滚,因为新数据保存那数据量比较大由子线程完成,然后删除数据是在主线程完成. 在方法上加上如下注解,看似 ...
- java 子线程传参_踩坑之Java执行Linux命令死锁阻塞挂起
1 问题背景 最近在做一个需求需要调用linux下的某个脚本来对ai的模型进行训练,很简单的需求,我像往常一样写下如下的代码片段: Process process = Runtime.getRunti ...
最新文章
- linux简单设计与实现代码,《linux内核设计与实现》第五章(示例代码)
- jdbc之防sql注入攻击
- HIBERNATE与 MYBATIS的对比
- 【转】HttpModule和HttpHandler(续)
- 零点是结束,也是开始。
- 剖析Volley请求多次的原理
- 苹果Mac 默认浏览器如何更改?设置成自己习惯用的浏览器
- linux重启oracle 各种方法
- 百度网盘windows10镜像文件
- JavaScript|表格背景颜色改变页面
- Excel如何把同类数据合并到同一单元格
- mac安装php+mysql数据库_Mac环境下Nginx+PHP+MySQL的安装与配置
- 如何在线把pdf转换成word转换器
- 雨棚板弹性法计算简图_雨棚板的计算书
- TextView添加中划线、下划线等
- 力扣347 前 K 个高频元素 -- JS
- 银行储蓄管理系统 课程设计
- 关于python中的模块的定义、使用、优点及其使用cpy文件的介绍 简单易懂
- 共享单车登录显示服务器未响应,ofo共享单车服务为什么出现故障
- chrome 下使用维基百科