应该何时进行应用程序清理

时间:2014-08-25 17:07:56

标签: java garbage-collection resource-cleanup

我刚刚读到我们可以使用shutdown hooks作为在应用程序退出之前向clean up提供函数的理想时间示例。

我想知道的是,例如,如果您有一个像Web服务一样全天候运行的应用程序,那么理想的时间是终止和清理诸如Executor Services之类的东西。如果应用程序不应该关闭,那么我们真的没有方便的清理时间或者确实能够干净地关闭它吗?

由于

1 个答案:

答案 0 :(得分:1)

问题太宽泛但如果我理解正确,那么Oracle docs会解释它:

  

程序中不再引用的池并且没有剩余的池   线程将自动关闭。如果您想确保   即使用户忘记呼叫,也会回收未引用的池   shutdown(),然后你必须安排未使用的线程最终死掉,   通过设置适当的保持活动时间,使用零下限   核心线程和/或设置allowCoreThreadTimeOut(boolean)。

因此,例如Executors.newSingleThreadExecutor()创建的ExecutorService是FinalizableDelegatedExecutorService的实例。现在,ExecutorService类具有finalize()方法,该方法在包装的ExecutorService对象上调用shutdown()方法。