关于多线程未捕获异常的处理介绍
2017-11-29 21:41
369 查看
XML Code
运行如下代码时发现手动抛出的异常并未被捕获,这就是java中多线程run方法中抛出的异常外部的catch是捕获不到的
运行结果如下
XML Code
java为捕获异常的处理
XML Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package com.lyzx.restdy.callable; import java.util.concurrent.ThreadFactory; public class T4 { public static void main(String[] args) { ex(); } public static void ex(){ try { new Thread(new ExceptionRunnable()).start(); }catch(Exception e) { System.out.println("捕获异常......"); } } } class ExceptionRunnable implements Runnable{ @Override public void run() { throw new RuntimeException("抛异常了...."); } } |
运行结果如下
XML Code
1 2 3 | Exception in thread "Thread-0" java.lang.RuntimeException: 抛异常了.... at com.lyzx.restdy.callable.ExceptionRunnable.run(T4.java:23) at java.lang.Thread.run(Unknown Source) |
XML Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | package com.lyzx.restdy.callable; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; public class T4 { public static void main(String[] args) { //ex(); catchEx(); try { TimeUnit.SECONDS.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } public static void ex(){ try { new Thread(new ExceptionRunnable()).start(); }catch(Exception e) { System.out.println("捕获异常......"); } } public static void catchEx(){ MyFactory f = new MyFactory(); ExceptionRunnable r = new ExceptionRunnable(); Thread t = f.newThread(r); System.out.println("catchEx:(任务)>>"+r); System.out.println("catchEx:(线程)>>"+t); t.start(); } } /** * 在线程中抛出异常 */ class ExceptionRunnable implements Runnable{ @Override public void run() { RuntimeException e = new RuntimeException("抛异常了...."); System.out.println("run:(异常)>>"+e); throw e; } } /** * 线程工厂 * 为每一个从该工厂中生产的线程分配一个异常处理器 */ class MyFactory implements ThreadFactory{ @Override public Thread newThread(Runnable r){ Thread t = new Thread(r); t.setUncaughtExceptionHandler(new MyExceptionHandler()); return t; } } /** * 异常处理器类 */ class MyExceptionHandler implements Thread.UncaughtExceptionHandler{ /** * Thread t 抛异常的线程 * Throwable e t这个线程抛出的 异常 */ @Override public void uncaughtException(Thread t,Throwable e) { System.out.println(t.getName()+"被捕获,现在要做一些异常处理"); System.out.println("uncaughtException:(异常)>>"+e); System.out.println("uncaughtException:(线程)>>"+t); } } |
相关文章推荐
- windows 多线程捕获未处理的异常,防止崩溃的地方影响到其它线程
- 关于未捕获异常(Uncaught Exception)的处理
- 关于未捕获异常的处理(WPF)
- 关于SQLserver2005事务和异常处理的联合处理以及在c#中的异常捕获
- 关于Android中多线程中异常捕获出现的问题和解决办法
- 关于SQLServer2005的学习笔记—异常捕获及处理
- 关于未捕获异常的处理(WPF)
- 关于未捕获异常的处理(WPF)
- [转载]关于SQLServer2005的学习笔记——异常捕获及处理
- 关于未捕获异常的处理(WPF)
- 多线程环境下处理未捕获的异常
- 关于SQLServer2005的学习笔记——异常捕获及处理
- 关于SQLServer2005的学习笔记——异常捕获及处理
- 关于未捕获异常的处理(WPF)
- 用代码简单介绍java中的异常的捕获及处理
- 关于SQLServer2005的学习笔记——异常捕获及处理
- 关于存储过程和函数异常出现和JAVA捕获简单处理方案
- 关于异常String out of range:-1及处理方案
- android捕获全局异常,并对异常做出处理
- Java 多线程异常捕获Runnable实现