java线程中的异常捕获 用try catch能捕获得到run中抛出的异常吗?
大家都知道在java开发中,我们可以用try catch来捕获异常,那么线程中出现了异常try catch 还依然管用吗?让我们一起先看个小例子吧。package com.javazx.test.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ExceptionThread implements Runnable {
public void run() {
throw new RuntimeException("线程内部出现异常");
}
public static void main(String[] args) {
try {
ExecutorService exec = Executors.newCachedThreadPool();
exec.execute(new ExceptionThread());
} catch (RuntimeException e) {
System.out.println("能捕获到异常吗?");
}
}
}
运行结果呢?
Exception in thread "pool-1-thread-1" java.lang.RuntimeException: 线程内部出现异常
at com.javazx.test.thread.ExceptionThread.run(ExceptionThread.java:8)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
答案已经很明显了,线程中是无法使用try catch来进行捕获的。那么如果要捕获异常呢我们该怎么做呢?javase 1.5后我们是可以用UncaughtExceptionHandler来捕获异常的,具体要怎么做呢?大家还是看demo吧。
1、
package com.javazx.test.thread;
public class ExceptionThread2 implements Runnable {
public void run() {
throw new RuntimeException("抛出运行时异常");
}
}
2、
package com.javazx.test.thread;
public class MyUnchecckedExceptionhandler implements Thread.UncaughtExceptionHandler {
public void uncaughtException(Thread t, Throwable e) {
System.out.println("捕获到异常:" + e);
}
public static void main(String [] args){
Thread t=new Thread(new ExceptionThread2());
t.setUncaughtExceptionHandler(new MyUnchecckedExceptionhandler());
t.start();
}
}
运行结果:
捕获到异常:java.lang.RuntimeException: 抛出运行时异常
终于捕获到了异常,大功告成!
页:
[1]