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

时间:2016-03-13 22:54:34

标签: java multithreading threadpool executorservice

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

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

很抱歉,如果已经有问题的话。

1 个答案:

答案 0 :(得分:1)

  

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

正确

  

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

它捕获所有Throwable,因此当你第一次出现错误时它不会失败。

  

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

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

  

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

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

  

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

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

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

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