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();
	}

}

© 2013, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记

发表评论

电子邮件地址不会被公开。 必填项已用*标注