java 子线程异常处理
发布时间:2020-12-15 07:40:09 所属栏目:Java 来源:网络整理
导读:如何在父线程中捕获来自子线程的异常呢 方法一:子线程中try... catch... 方法二:为线程设置异常处理器UncaughtExceptionHandler (异常处理也是在子线程中执行,相当于在子线程中加上了一个异常拦截器,可以使用下面的程序验证) (1)Thread.setUncaughtE
如何在父线程中捕获来自子线程的异常呢方法一:子线程中try... catch...方法二:为线程设置异常处理器UncaughtExceptionHandler(异常处理也是在子线程中执行,相当于在子线程中加上了一个异常拦截器,可以使用下面的程序验证) (1)Thread.setUncaughtExceptionHandler设置当前线程的异常处理器 (2)Thread.setDefaultUncaughtExceptionHandler为整个程序设置默认的异常处理器 (3)new Thread(new ThreadTest(),new runable{})时传入 ThreadGroup? 方法三,通过Future的get方法捕获子线程异常? import java.util.concurrent.*; public class ThreadTest extends ThreadGroup{ private ThreadTest(){ super("ThreadTest"); } public static void main(String[] args) { System.out.println(Thread.currentThread().getId()); Thread t1=new Thread(new ThreadTest(),new Runnable() {//传入继承ThreadGroup的类对象 @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } if (1==1){ throw new NullPointerException("111"); } } }); t1.start(); /*ExecutorService executorService = Executors.newFixedThreadPool(8); Future future = executorService.submit(()->{ try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } if (1==1){ throw new NullPointerException("111"); } return 1; }); try { future.get(); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { //e.getCause().printStackTrace(); e.printStackTrace(); } try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } executorService.shutdownNow();*/ } public void uncaughtException(Thread thread,Throwable exception) { /** * 当线程抛出unckecked异常时,系统会自动调用该函数,但是是在抛出异常的线程内执行*/ System.out.println(Thread.currentThread().getId()); System.out.println(thread.getId()); exception.printStackTrace();//example,print stack trace } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |