Java多线程之捕获异常
生活随笔
收集整理的這篇文章主要介紹了
Java多线程之捕获异常
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1.主線程不能捕獲到子線程的異常
package Thread.Exection;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class ExeceptionThread implements Runnable {@Overridepublic void run() {throw new RuntimeException();}public static void main(String[] args) {try {ExecutorService exec = Executors.newCachedThreadPool();exec.execute(new ExeceptionThread());} catch (Exception e) {System.out.println("exeception has handled");}} }?輸出:
Exception in thread "pool-1-thread-1" java.lang.RuntimeExceptionat Thread.Exection.ExeceptionThread.run(ExeceptionThread.java:10)at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)at java.lang.Thread.run(Unknown Source)?
?
2.通過(guò)設(shè)置HandlerThreadFactory捕獲異常
package Thread.Exection;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory;class ExceptionThread2 implements Runnable {public void run() {Thread t = Thread.currentThread();System.out.println("run() by " + t);System.out.println("eh=" + t.getUncaughtExceptionHandler());throw new RuntimeException();} }class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {@Overridepublic void uncaughtException(Thread t, Throwable e) {System.out.println("caught " + e);} }class HandlerThreadFactory implements ThreadFactory {@Overridepublic Thread newThread(Runnable r) {System.out.println(this + " creating new Thread");Thread t = new Thread(r);System.out.println("created " + t + " ID:" + t.getId());t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());System.out.println("eh=" + t.getUncaughtExceptionHandler());return t;} }public class CaptureUncaughtException {public static void main(String[] args) {ExecutorService exec = Executors.newCachedThreadPool(new HandlerThreadFactory());exec.execute(new ExceptionThread2());} }輸出:
Thread.Exection.HandlerThreadFactory@4e25154f creating new Thread created Thread[Thread-0,5,main] ID:9 eh=Thread.Exection.MyUncaughtExceptionHandler@70dea4e run() by Thread[Thread-0,5,main] eh=Thread.Exection.MyUncaughtExceptionHandler@70dea4e Thread.Exection.HandlerThreadFactory@4e25154f creating new Thread created Thread[Thread-1,5,main] ID:11 eh=Thread.Exection.MyUncaughtExceptionHandler@193fa958 caught java.lang.RuntimeException?
?
3.通過(guò)設(shè)置默認(rèn)異常捕獲類(lèi)捕獲異常
package Thread.Exection;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class SettingDefaultHandler {public static void main(String[] args) {Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());ExecutorService exec=Executors.newCachedThreadPool();exec.execute(new ExceptionThread2());} }?輸出:
run() by Thread[pool-1-thread-1,5,main] eh=java.lang.ThreadGroup[name=main,maxpri=10] caught java.lang.RuntimeException?
?
轉(zhuǎn)載于:https://www.cnblogs.com/zhuawang/p/3751875.html
總結(jié)
以上是生活随笔為你收集整理的Java多线程之捕获异常的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 转 abap中sy-index和sy-t
- 下一篇: 每天,每周,每月,每年程序员该做的事情