首页 文章

Executors.newSingleThreadExecutor服务是否需要使用shutdown进行清理?

提问于
浏览
1

关于使用newSingleThreadExecutor清理执行程序服务,我有一点困惑 . 根据其实现,它在内部创建一个线程的线程池,如果失败,将创建一个新线程 . 我正在使用singleThreadExecutor,因为我想顺序运行在运行时创建的任务 . 所以我关心的是,当系统中没有更多任务时,我是否需要关闭此执行程序服务?

我已经读过ExecutorService中的活动线程阻止JVM关闭 . 由于singleThreadExecutor也在里面创建了一个线程池,所以这意味着该线程是否处于活动状态?

对不起,如果已经有问题了 .

1 回答

  • 1

    它在内部创建一个线程的线程池

    正确

    如果失败,将创建一个新的

    它会捕获所有Throwable,因此当您首先出现错误时它不会失败 .

    所以我关心的是,当系统中没有更多任务时,我是否需要关闭此执行程序服务?

    你应该关机是你担心资源 . 如果你的线程是一个守护程序线程,它将不会阻止JVM关闭(默认情况下它将是一个非守护程序线程 .

    我已经读过ExecutorService中的活动线程阻止JVM关闭 .

    只有非守护程序线程才能阻止JVM关闭 .

    因为singleThreadExecutor也在里面创建一个线程池,所以这意味着该线程是否处于活动状态?

    它在处理某些事情时会处于活动状态 . 它是否处于活动状态不会改变JVM是否关闭,只会改变该线程是否为守护程序 .

    您可以通过提供线程工厂使线程成为守护程序线程 . 我建议你这样做,即使你所做的只是设置名称,这样可以更轻松地调试/分析你的应用程序 .

    这是我之前写的一个例子NamedThreadFactory

相关问题