UncaughtExceptionHandler类
在Java的多线程技术中,我们可以使用UncaughtExceptionHandler类对多线程中的异常进行“捕捉”。
setUncaughtExceptionHandler()的作用是对指定的线程对象设置默认的异常处理器。在Thread类中还可以使用setDefaultUncaughtExceptionHandler()方法对所有线程对象设置异常处理器。
1、对指定线程对象设置默认的异常处理器
package ReentrantLock; import java.lang.Thread.UncaughtExceptionHandler; public class t3 { public static void main(String[] args) { thread t1 = new thread(); t1.setName("线程t1"); t1.setUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { System.out.println("线程:" + t.getName() + " 出现了异常:"); e.printStackTrace(); } }); t1.start(); thread t2 = new thread(); t2.setName("线程t2"); t2.start(); } } class thread extends Thread { @Override public void run() { super.run(); String username = null; System.out.println(username.hashCode()); } }
Exception in thread "线程t2" 线程:线程t1 出现了异常: java.lang.NullPointerException at ReentrantLock.thread.run(t3.java:40) java.lang.NullPointerException at ReentrantLock.thread.run(t3.java:40)
2、对所有的线程对象设置异常处理器
package ReentrantLock; import java.lang.Thread.UncaughtExceptionHandler; public class t3 { public static void main(String[] args) { thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread arg0, Throwable arg1) { System.out.println("线程:" + arg0.getName() + " 出现了异常:"); arg1.printStackTrace(); } }); thread t1 = new thread(); t1.setName("线程t1"); t1.start(); thread t2 = new thread(); t2.setName("线程t2"); t2.start(); } } class thread extends Thread { @Override public void run() { super.run(); String username = null; System.out.println(username.hashCode()); } }
线程:线程t1 出现了异常: 线程:线程t2 出现了异常: java.lang.NullPointerException at ReentrantLock.thread.run(t3.java:31) java.lang.NullPointerException at ReentrantLock.thread.run(t3.java:31)
作者:Ryanjie
出处:http://www.cnblogs.com/ryanjan/
本文版权归作者和博客园所有,欢迎转载。转载请在留言板处留言给我,且在文章标明原文链接,谢谢!
如果您觉得本篇博文对您有所收获,觉得我还算用心,请点击右下角的 [推荐],谢谢!