我需要在 executorservice 中处理异常吗

我是否需要在 executorservice 中处理运行时异常?我在 spring boot web 应用程序中尝试了一个例子,尽管有异常,代码仍然会执行


这是代码:


@RestController

class 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";

    }

}


芜湖不芜
浏览 143回答 2
2回答

富国沪深

当在一个线程中抛出异常时,它不会传播到其他线程,除非你做一些事情让它这样做(比如使用 Future)。这里线程导致异常并死亡,但程序的其余部分不受影响。执行程序为丢失的线程创建一个替换,请参阅 api 文档:创建一个 Executor,它使用单个工作线程在无界队列中运行,并在需要时使用提供的 ThreadFactory 创建一个新线程。与其他等效的 newFixedThreadPool(1, threadFactory) 不同,返回的执行程序保证不可重新配置以使用其他线程。在我看来,让任务处理它们引起的异常是个好主意。否则线程会死亡,池必须启动一个新线程来替换它。这基本上就是评论中链接的文章所说的。

侃侃无极

你应该保持返回值 Future并使用 Future.get() 询问是否存在未处理的异常
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java