关于使用newSingleThreadExecutor清理执行程序服务,我有一点困惑 . 根据其实现,它在内部创建一个线程的线程池,如果失败,将创建一个新线程 . 我正在使用singleThreadExecutor,因为我想顺序运行在运行时创建的任务 . 所以我关心的是,当系统中没有更多任务时,我是否需要关闭此执行程序服务?
我已经读过ExecutorService中的活动线程阻止JVM关闭 . 由于singleThreadExecutor也在里面创建了一个线程池,所以这意味着该线程是否处于活动状态?
对不起,如果已经有问题了 .
1 回答
正确
它会捕获所有Throwable,因此当您首先出现错误时它不会失败 .
你应该关机是你担心资源 . 如果你的线程是一个守护程序线程,它将不会阻止JVM关闭(默认情况下它将是一个非守护程序线程 .
只有非守护程序线程才能阻止JVM关闭 .
它在处理某些事情时会处于活动状态 . 它是否处于活动状态不会改变JVM是否关闭,只会改变该线程是否为守护程序 .
您可以通过提供线程工厂使线程成为守护程序线程 . 我建议你这样做,即使你所做的只是设置名称,这样可以更轻松地调试/分析你的应用程序 .
这是我之前写的一个例子NamedThreadFactory