为了账号安全,请及时绑定邮箱和手机立即绑定

我需要在 executorservice 中处理异常吗

我需要在 executorservice 中处理异常吗

芜湖不芜 2021-09-03 16:20:33
我是否需要在 executorservice 中处理运行时异常?我在 spring boot web 应用程序中尝试了一个例子,尽管有异常,代码仍然会执行这是代码:@RestControllerclass WelcomeController {    ExecutorService es = Executors.newSingleThreadExecutor();    @GetMapping("/sayhi")    public String sayHi() {        es.submit(() -> {            System.out.println("hello");            int a = 0;            if (10 / a == 1) {            }        });        return "hi";    }}
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

当在一个线程中抛出异常时,它不会传播到其他线程,除非你做一些事情让它这样做(比如使用 Future)。这里线程导致异常并死亡,但程序的其余部分不受影响。

执行程序为丢失的线程创建一个替换,请参阅 api 文档:

创建一个 Executor,它使用单个工作线程在无界队列中运行,并在需要时使用提供的 ThreadFactory 创建一个新线程。与其他等效的 newFixedThreadPool(1, threadFactory) 不同,返回的执行程序保证不可重新配置以使用其他线程。

在我看来,让任务处理它们引起的异常是个好主意。否则线程会死亡,池必须启动一个新线程来替换它。这基本上就是评论中链接的文章所说的。


查看完整回答
反对 回复 2021-09-03
?
侃侃无极

TA贡献2051条经验 获得超10个赞

你应该保持返回值 Future

并使用 Future.get() 询问是否存在未处理的异常


查看完整回答
反对 回复 2021-09-03
  • 2 回答
  • 0 关注
  • 142 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信