当涉及(短期运行的)任务时,通常使用执行器,但是如何处理长时间运行的任务,例如需要在应用程序的整个生命周期内运行的任务,哪种方法最好呢?
假设我有一个应用程序,其中一个在单独的线程上运行的任务每 X 秒轮询更改目录。除非应用程序退出,否则此任务不应停止轮询。我该如何启动和管理它?
new Thread(theLongRunningTask).start()
是否是一个很差的选择?
当涉及(短期运行的)任务时,通常使用执行器,但是如何处理长时间运行的任务,例如需要在应用程序的整个生命周期内运行的任务,哪种方法最好呢?
假设我有一个应用程序,其中一个在单独的线程上运行的任务每 X 秒轮询更改目录。除非应用程序退出,否则此任务不应停止轮询。我该如何启动和管理它?
new Thread(theLongRunningTask).start()
是否是一个很差的选择?
这也是Executors框架的一个用例,具体来说是使用scheduleAtFixedRate。只需注意当应用程序完成后,线程仍然存在的情况。您可以使用自定义的ThreadFactory
来创建守护线程。或者,如果您想要更简单的东西,可以使用Timer API。您可以使用带有布尔参数的构造函数来构造Timer
,表示“使用守护线程”。当应用程序结束时,您还可以显式地关闭执行器服务。