java中给出一个主线程如何捕获子线程异常的例子
马克-to-win:下面我们看主线程如何捕获子线程的异常
例:1.5.4-本章源码
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
import java.lang.Thread.UncaughtExceptionHandler;
class ThreadMark_to_win extends Thread
{
public void run()
{
for(int i=0;i<3;i++)
{
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("在子线程"+i);
}
throw new RuntimeException("在子线程,我自己抛出的一个异常");
}
String getMyName()
{
return "马克-to-win在子线程";
}
}
public class Test
{
public static void main(String[] args)
{
ThreadMark_to_win tm = new ThreadMark_to_win();
tm.setUncaughtExceptionHandler(new UncaughtExceptionHandler()
{
public void uncaughtException(Thread t, Throwable e)
{
System.out.println("在主程序处理呢 "+((ThreadMark_to_win)t).getMyName() + " : " + e.getMessage());
}
});
tm.start();
for(int i=0;i<10;i++)
{
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("在主线程"+i);
}
}
}
输出结果:
在主线程0
在子线程0
在主线程1
在子线程1
在子线程2
在主线程2
在主程序处理呢 马克-to-win在子线程 : 在子线程,我自己抛出的一个异常
在主线程3
在主线程4
在主线程5
在主线程6
在主线程7
在主线程8
在主线程9
后续:
马克-to-win:主线程通过tm.setUncaughtExceptionHandler这种方法,设置了一个Handler(所谓的处理器)这个处理器处理tm的uncaughtException(未捕获的异常)。