执行程序通常用于(短期运行)任务,但处理长期运行的任务的最佳方法是什么,例如:应该在应用程序的整个生命周期中运行的任务?
假设我有一个应用程序,其中在单独的线程上运行的任务每X秒轮询一个目录以进行更改。除非应用程序退出,否则此任务永远不应退出轮询。我该如何开始和管理呢?
new Thread(theLongRunningTask).start()
会是一个糟糕的选择吗?
答案 0 :(得分:5)
这也是Executors框架的用例,特别是scheduleAtFixedRate。只需注意应用程序完成时挂起的线程。您可以使用生成守护程序线程的自定义ThreadFactory
。或者,如果您想要更简单的东西,请使用Timer API。您可以构造一个带有布尔参数的Timer
,意思是“使用守护程序线程”。您还可以在应用程序结束时显式关闭执行程序服务。