我刚刚读到我们可以使用shutdown hooks作为在应用程序退出之前向clean up
提供函数的理想时间示例。
我想知道的是,例如,如果您有一个像Web服务一样全天候运行的应用程序,那么理想的时间是终止和清理诸如Executor Services之类的东西。如果应用程序不应该关闭,那么我们真的没有方便的清理时间或者确实能够干净地关闭它吗?
由于
答案 0 :(得分:1)
问题太宽泛但如果我理解正确,那么Oracle docs会解释它:
程序中不再引用的池并且没有剩余的池 线程将自动关闭。如果您想确保 即使用户忘记呼叫,也会回收未引用的池 shutdown(),然后你必须安排未使用的线程最终死掉, 通过设置适当的保持活动时间,使用零下限 核心线程和/或设置allowCoreThreadTimeOut(boolean)。
因此,例如Executors.newSingleThreadExecutor()
创建的ExecutorService是FinalizableDelegatedExecutorService
的实例。现在,ExecutorService
类具有finalize()
方法,该方法在包装的ExecutorService对象上调用shutdown()
方法。