JAVA并发,线程异常捕获
由于线程的特性,当我们启动了线程是没有办法用try catch捕获异常的,如下例:
1 package com.xt.thinks21_2; 2 3 import java.util.concurrent.ExecutorService; 4 import java.util.concurrent.Executors; 5 6 /** 7 * 线程异常捕获测试 8 * 9 * @author xue 10 * 11 */ 12 public class ThreadUncaughtExceptionTest implements Runnable { 13 14 @Override 15 public void run() { 16 // TODO Auto-generated method stub 17 throw new NullPointerException(); 18 } 19 20 public static void main(String[] args) { 21 try { 22 ExecutorService es = Executors.newCachedThreadPool(); 23 es.execute(new ThreadUncaughtExceptionTest()); 24 es.shutdown(); 25 // or this 26 // Thread t = new Thread(new ThreadUncaughtExceptionTest()); 27 // t.start(); 28 } catch (Exception e) { 29 // TODO: handle exception 30 } 31 32 } 33 }
打印异常信息为:
Exception in thread "pool-1-thread-1" java.lang.NullPointerException
at com.xt.thinks21_2.ThreadUncaughtExceptionTest.run(ThreadUncaughtExceptionTest.java:17)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
此时,我们需要为线程定制工厂类来生产线程,为线程指定UncaughtExceptionHandler
1 package com.xt.thinks21_2; 2 3 import java.lang.Thread.UncaughtExceptionHandler; 4 import java.util.concurrent.ExecutorService; 5 import java.util.concurrent.Executors; 6 import java.util.concurrent.ThreadFactory; 7 8 /** 9 * 未捕获异常执行程序 10 * 11 * @author Administrator 12 * 13 */ 14 class ThreadUncaughtExceptionHandler implements UncaughtExceptionHandler { 15 16 @Override 17 public void uncaughtException(Thread t, Throwable e) { 18 // TODO Auto-generated method stub 19 System.out.println("caught:" + e); 20 } 21 22 } 23 24 /** 25 * 线程工厂 26 * 27 * @author Administrator 28 * 29 */ 30 class HandlerThreadExceptionFactory implements ThreadFactory { 31 32 @Override 33 public Thread newThread(Runnable r) { 34 // TODO Auto-generated method stub 35 Thread t = new Thread(r); 36 t.setUncaughtExceptionHandler(new ThreadUncaughtExceptionHandler()); 37 return t; 38 } 39 40 } 41 42 /** 43 * 线程异常捕获测试 44 * 45 * @author xue 46 * 47 */ 48 public class ThreadUncaughtExceptionTest implements Runnable { 49 50 @Override 51 public void run() { 52 // TODO Auto-generated method stub 53 throw new NullPointerException(); 54 } 55 56 public static void main(String[] args) { 57 ExecutorService es = Executors 58 .newCachedThreadPool(new HandlerThreadExceptionFactory()); 59 es.execute(new ThreadUncaughtExceptionTest()); 60 es.shutdown(); 61 } 62 }
此时,我们就可以看到异常信息被捕获到了:
caught:java.lang.NullPointerException
转载于:https://www.cnblogs.com/wubingshenyin/p/4448980.html
JAVA并发,线程异常捕获相关推荐
- 并发编程五:java并发线程池底层原理详解和源码分析
文章目录 java并发线程池底层原理详解和源码分析 线程和线程池性能对比 Executors创建的三种线程池分析 自定义线程池分析 线程池源码分析 继承关系 ThreadPoolExecutor源码分 ...
- java runnable 异常_详解Java中多线程异常捕获Runnable的实现
详解Java中多线程异常捕获Runnable的实现 1.背景: Java 多线程异常不向主线程抛,自己处理,外部捕获不了异常.所以要实现主线程对子线程异常的捕获. 2.工具: 实现Runnable接口 ...
- 理解和解决Java并发修改异常ConcurrentModificationException(转载)
原文地址:https://www.jianshu.com/p/f3f6b12330c1 理解和解决Java并发修改异常ConcurrentModificationException 不知读者在Java ...
- Java多层的异常捕获
Java多层的异常捕获 参考文章: (1)Java多层的异常捕获 (2)https://www.cnblogs.com/somedayLi/p/7847136.html 备忘一下.
- java 并发 线程安全_Java并发教程–线程安全设计
java 并发 线程安全 在回顾了处理并发程序时的主要风险(例如原子性或可见性 )之后,我们将通过一些类设计来帮助我们防止上述错误. 其中一些设计导致了线程安全对象的构造,从而使我们能够在线程之间安全 ...
- java 并发线程_Java并发教程–线程之间的可见性
java 并发线程 当在不同线程之间共享对象的状态时,除了原子性外,其他问题也会发挥作用. 其中之一是可见性. 关键事实是,如果没有同步,则不能保证指令按照它们在源代码中出现的顺序执行. 这不会影响单 ...
- JAVA Thread线程异常监控
一.场景描述:单线程程序可以用try...catch捕获程序的异常,而在多线程程序的时候是无法使用try...catch捕获. 示例1:多线程发生异常,无法使用try...catch捕获问题 publ ...
- Java并发—线程池ThreadPoolExecutor基本总结
原文作者:Matrix海子 原文地址:Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线 ...
- Java并发线程之线程池
初始化线程池后,把任务丢进去,等待调度就可以了,使用起来比较方便. JAVA中Thread是线程类,不建议直接使用Thread执行任务,在并发数量比较多的情况下,每个线程都是执行一个很短的时间就任务结 ...
最新文章
- kotlin + springboot 整合redis,Redis工具类编写及单元测试
- 华为:HarmonyOS 即将开源!
- Centos7+Mysql5.7实现主从复制
- 我的C#文章模块代码
- 检测网络耗时_无人机替代桥梁检测车检测桥梁的可行性分析
- 数据结构 (计算机存储、组织数据方式)
- IIs管理服务一直启动失败的原因之一
- ubuntu14.04上网问题
- 分解连续自然数的和_小学奥数各年级经典题解题技巧大全——分解因数法(2)...
- 杭州python靠谱吗_杭州Python高薪就业靠谱吗?
- 大学英语期末考计算机上答卷,英语期末考试质量分析
- excel 统计字数公式
- python协同过滤算法_协同过滤算法介绍及算法实现
- Could not load type 'System.DateTimeOffset'的问题
- 四大行的CIO们如何看待大数据
- linux蓝牙主从机模式代码,技术贴 丨 Android 蓝牙BLE开发Docker入门与WMS2.0实例
- 石家庄12重点项目开工,滹沱新区更名为正定新区
- 关于登录PL/SQL时出现的错误:error while tring to retrieve text for error ORA-12541
- 车贷真比房贷利率低?
- js Function对象扩展与延时执行函数实例代码