在并发的情况下,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();
- }
- }