无限循环+ Thread.sleep替换cron作业

Don*_*dle 1 java cron multithreading sleep infinite-loop

所以今天我脑子里有了一个想法...而且我想听一些反馈.我有一个Java应用程序,需要每5分钟检查一个目录.简单而简单的应用程序需要每五分钟运行一次.

看起来像cronjob的一个很好的候选人,但我想知道...为什么不保持逻辑/时间在应用程序中像这样(显然简化):

public static void main(String[] args) {
    while(true) { // repeatedly execute...
        // do the work/job
        Thread.sleep(600 * 1000); // make the thread sleep for 5 minutes
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到的一个重要缺点是" 一旦它开始,我们如何停止这个应用程序?删除它?

除了那个之外,还有其他重要的缺点吗?

我应该停止做白日梦而只是使用cron工作吗?

Jim*_*hel 5

一些重大缺点:

  • 如果您想要更改轮询频率(即每2分钟或每10分钟执行一次),则必须更改程序.如果您有不规则的投票时间表,尤其是星期一到星期五每5分钟一次,但周六和周日每15分钟一次.当然,您不认为您的程序需要这样做,但需求会发生变化.
  • 正如你所说,杀死进程是阻止程序的唯一方法.在中间过程中杀死它可能是一件坏事.您当然可以添加一些取消逻辑,但这是额外的开发时间.
  • 该程序占用内存,而它坐在那里什么都不做(大部分时间).这是浪费资源.当您使用具有许多GB内存的系统时,可能不是什么大不了的事,但当您处理内存有限的嵌入式系统时,它就成了一个问题.
  • 当你已经在操作系统中内置了一个非常好的调度程序时,你在浪费时间编写自己的调度,然后必须调试和维护.

我把这个程序称为"捕捉程序",因为它的行为就像一只猫:它大部分时间都在睡觉,现在醒来然后伸展并且可能会敲打一根绳子几分钟,然后又回到睡眠状态.节目不是猫.