如何执行长时间运行的任务?

5

当涉及(短期运行的)任务时,通常使用执行器,但是如何处理长时间运行的任务,例如需要在应用程序的整个生命周期内运行的任务,哪种方法最好呢?

假设我有一个应用程序,其中一个在单独的线程上运行的任务每 X 秒轮询更改目录。除非应用程序退出,否则此任务不应停止轮询。我该如何启动和管理它?

new Thread(theLongRunningTask).start()是否是一个很差的选择?

1个回答

5

这也是Executors框架的一个用例,具体来说是使用scheduleAtFixedRate。只需注意当应用程序完成后,线程仍然存在的情况。您可以使用自定义的ThreadFactory来创建守护线程。或者,如果您想要更简单的东西,可以使用Timer API。您可以使用带有布尔参数的构造函数来构造Timer,表示“使用守护线程”。当应用程序结束时,您还可以显式地关闭执行器服务。


你可以在程序退出时关闭执行器(假设提交的任务是可中断的和/或不会一直运行),而不是使用ThreadFactory + 守护线程。 - assylias
是的,我同意 - 我不太喜欢守护线程,因为在线程管理方面它们很容易失控。 - Cowboy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接