我是否需要在 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) 不同,返回的执行程序保证不可重新配置以使用其他线程。
在我看来,让任务处理它们引起的异常是个好主意。否则线程会死亡,池必须启动一个新线程来替换它。这基本上就是评论中链接的文章所说的。
添加回答
举报
0/150
提交
取消