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