java基础-并发-如何捕获线程异常
来源:互联网 发布:软件系统演示平台 编辑:程序博客网 时间:2024/05/22 13:41
由于线程本质特性,使得我们不能捕获从线程中逃逸的异常。一旦异常逃出线程的run方法,他就会向外传播到控制台。
捕获线程中异常分为以下几步:
新建线程异常处理器,实现Thread.UncaughtExceptionHandler接口
class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{ @Override public void uncaughtException(Thread t, Throwable e) { System.out.println("catch " + e); }}
创建线程工厂,给每一个由此工厂生产的线程都设置线程处理器:
class HandlerThreadFactory implements ThreadFactory{ @Override public Thread newThread(Runnable r) { System.out.println(this+" creating new Thread"); Thread t = new Thread(r); System.out.println(" created " + t); //设置线程处理器 t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler()); System.out.println("eh= "+t.getUncaughtExceptionHandler()); return t; }}
创建线程:
class ExceptionThread implements Runnable{ @Override public void run() { Thread t = Thread.currentThread(); System.out.println("run() by "+ t); System.out.println("eh= " +t.getUncaughtExceptionHandler()); throw new RuntimeException(); }}
使用测试:
public class CaptureUnCaughtException { public static void main(String[] args) { ExecutorService exec = Executors.newCachedThreadPool(new HandlerThreadFactory()); exec.execute(new ExceptionThread()); }}
输出(不一定完全一样):
com.len.javabase.supervene.base.HandlerThreadFactory@4e25154f creating new Thread created Thread[Thread-0,5,main]eh= com.len.javabase.supervene.base.MyUncaughtExceptionHandler@70dea4erun() by Thread[Thread-0,5,main]eh= com.len.javabase.supervene.base.MyUncaughtExceptionHandler@70dea4ecom.len.javabase.supervene.base.HandlerThreadFactory@4e25154f creating new Thread created Thread[Thread-1,5,main]eh= com.len.javabase.supervene.base.MyUncaughtExceptionHandler@471be934catch java.lang.RuntimeException
1 0
- java基础-并发-如何捕获线程异常
- Java如何捕获线程异常?
- java 线程异常捕获
- java 线程 捕获异常
- java捕获线程异常
- 如何捕获子线程异常
- 如何捕获java线程中的逃逸的异常
- 如何捕获java线程中的逃逸的异常
- 如何捕获java线程中的逃逸的异常
- 如何捕获java线程中的逃逸的异常
- JAVA 线程中的异常捕获
- JAVA 线程中的异常捕获
- JAVA 线程中的异常捕获
- Java多线程-捕获线程异常
- Java基础:异常捕获顺序
- java并发基础--线程
- Java线程并发基础
- java线程并发基础
- Unity Navmesh
- [POJ3294]Life Forms(后缀数组+二分)
- LwIP BUG之ARP缓存
- 码字 层映射 预编码的概念总结
- Android设计模式---单例
- java基础-并发-如何捕获线程异常
- 《C++ Primer Plus(第六版)》(26)(第十三章 类继承 复习题答案)
- 缺失值处理
- 由bayes滤波导出标准Kalman滤波
- 素数环问题
- 机器人的运动范围
- Mysql-分页查询优化
- 普通最大子段和
- Java中普通代码块,构造代码块,静态代码块区别及代码示例