0%

Java多线程 线程中异常处理

默认情况下,不能捕获线程中逃逸的异常,一但异常逃出run方法,就会向外传播到控制台,J2SE 5以后,可以使用Executor来解决这个问题。 Thread类有一个setUncaughtExceptionHandler方法,可以设置未捕获异常的处理方法。利用ThreadFactory,我们可以给所有使用线程池管理的线程添加处理方法。

package com.test;

import java.lang.Thread.UncaughtExceptionHandler;
import java.util.concurrent.ThreadFactory;

public class TFactory implements ThreadFactory {

    @Override
    public Thread newThread(Runnable r) {
        // TODO 自动生成的方法存根
        Thread t=new Thread(r);
        t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                // TODO 自动生成的方法存根
                System.out.println("caught "+e);
            }
        });
        return t;
    }

}

线程池中使用:

package com.test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Main {
    public static void main(String[] args) {
        ExecutorService exec=Executors.newCachedThreadPool(new TFactory());

        exec.execute(new Runnable() {
            @Override
            public void run() {
                // TODO 自动生成的方法存根
                throw new IllegalArgumentException();
            }
        });
        exec.shutdown();
    }

}