在并发的情况下,try{}catch{Exception ex}不能捕获一般的异常处理,这会导致在异常产生时会直接将异常输出到控制台或者是用户界面,在java5中加入了一些接口来解决这个问题,下面为简单的事例
package com.eric.concurrency;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 这个程序主要掩饰了在程序中队Runnable异常的捕获方法
*
* @author Eric
*
*/
public class ExceptionThread {
public static void main(String[] args) {
try {
CatchException.catchExceptionByUncaughtExceptionHandler();
System.out.println("************************************");
// CatchException.catchExceptionByCatch();
} catch (Exception ex) {
// ex.printStackTrace();
}
}
}
class ExceptionRunnable implements Runnable {
public void run() {
throw new RuntimeException("Throw By Runnable");
}
}
// 用普通的catch方法捕获
class CatchException {
public static void catchExceptionByCatch() {
ExecutorService es = Executors.newCachedThreadPool();
es.execute(new ExceptionRunnable());
}
/*
* use try{} catch{} block can't catch exception from Runnable,to solve the
* problem. Thread.UncaughtExceptionHandler is a new interface in Java SE5;
* it allows you o attach an exception handler to each Thread object.
* Thread.UncaughtExceptionHandler.uncaughtException( ) is automatically
* called when that thread is about to die from an uncaught exception.
*/
public static void catchExceptionByUncaughtExceptionHandler() {
Thread t = new Thread(new ExceptionRunnable());
t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("Exception:" + e.getMessage() + " was catched");
}
});
t.start();
}
}