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)

  

 

posted @ 2020-11-10 16:25  Peterxiazhen  阅读(551)  评论(0编辑  收藏  举报