面试题答案
一键面试- 线程组捕获和处理异常的方式
- 在Java中,线程组可以设置一个
UncaughtExceptionHandler
来处理线程组内线程抛出的未捕获异常。 - 当线程抛出一个未捕获的异常时,JVM会首先尝试调用该线程自身的
UncaughtExceptionHandler
(如果设置了的话)。如果线程没有设置UncaughtExceptionHandler
,JVM会查找该线程所属线程组的UncaughtExceptionHandler
。如果线程组也没有设置UncaughtExceptionHandler
,则会使用默认的UncaughtExceptionHandler
,它通常会将异常信息打印到标准错误输出。
- 在Java中,线程组可以设置一个
- 代码示例
public class ThreadGroupExceptionHandling { public static void main(String[] args) { // 创建线程组 ThreadGroup threadGroup = new ThreadGroup("MyThreadGroup"); // 设置线程组的异常处理器 threadGroup.setUncaughtExceptionHandler(new ThreadGroup.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { System.out.println("线程组捕获到线程 " + t.getName() + " 抛出的异常: " + e.getMessage()); } }); // 创建线程 Thread thread = new Thread(threadGroup, new Runnable() { @Override public void run() { throw new RuntimeException("模拟运行时异常"); } }, "MyThread"); // 启动线程 thread.start(); } }
在上述代码中:
- 首先创建了一个名为
MyThreadGroup
的线程组。 - 然后为该线程组设置了
UncaughtExceptionHandler
,当线程组内的线程抛出未捕获异常时,该处理器会打印出异常信息。 - 接着创建了一个属于该线程组的线程
MyThread
,在线程的run
方法中抛出了一个RuntimeException
。当这个异常抛出时,线程组的异常处理器会捕获并处理这个异常。