【线程池】线程池的线程遇到异常后去哪里?怎么处理?

您所在的位置:网站首页 win10系统线程异常未处理怎么办恢复 【线程池】线程池的线程遇到异常后去哪里?怎么处理?

【线程池】线程池的线程遇到异常后去哪里?怎么处理?

2024-07-11 22:24| 来源: 网络整理| 查看: 265

1 四种解决任务代码抛异常的方案:

在我们提供的Runnable的run方法中捕获任务代码可能抛出的所有异常,包括未检测异常使用ExecutorService.submit执行任务,利用返回的Future对象的get方法接收抛出的异常,然后进行处理(使用java.util.concurrent.FutureTask包装,实现call)重写ThreadPoolExecutor.afterExecute方法,处理传递到afterExecute方法中的异常为工作者线程设置UncaughtExceptionHandler,在uncaughtException方法中处理异常

要注意的是,使用最后一种方案时,无法处理以submit的方式提交的任务

 

1.1 第一种源码:异常会导致线程死亡,创建新的工作者加入线程池

 

 

 

1.2 第二种源码: 工作线程还是一样的,只是run方法是执行含有生命周期的Future对象,所以不会多次创建工作者

经过FutureTask包装! public FutureTask(Runnable runnable, V result) { this.callable = Executors.callable(runnable, result); this.state = NEW; // ensure visibility of callable }

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3