java - java中不使用定时器,仅在时间到时才执行方法

标签 java

我想在类中执行一个方法,比如每天只执行一次。如果一天内已经执行,则返回或执行该方法。

我想知道如果我退出代码会发生什么,它会在后台运行吗?

最佳答案

假设您已经知道如何安排任务run daily 诀窍是知道任务是否已经在当天运行,而无需时间表提示。

为了实现所需的行为,您需要保存最近一次运行的时间戳(作为 java 环境中的变量或磁盘上的文件),并在更新之前进行检查它并执行该函数。

一些伪代码:

Static bool timeManager(){
   CurrentTime = getCurrentTime()
   TimeStamp = getTimeStamp()
   if(CurrentTime - TimeStamp > 1day-afewMinutes){
        UpdateTimeStamp(CurrentTime)
        return true
   }else{
        return false
   }
}
void jobWrapper(){
    if timeManager(){
        doTheJob()
    }else{
        log("Skipping job at "+currentTime+" because job ran "+lastTime)
    }
}

编辑:回滚指出了竞争条件,因此我将时间管理器放在静态方法中。另外,我意识到四舍五入到秒可能会让你烦恼,所以我想我应该从一整天中减去几分钟,以避免由于四舍五入而以 24 小时为间隔安排的任务相互阻塞...

关于java - java中不使用定时器,仅在时间到时才执行方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46168086/

相关文章:

java - Zuul无法路由到在 Eureka 服务器中注册的应用程序

Java Streams - 嵌套流的映射方法无法按预期工作

java - 如何在 SWT、Java 中管理多个闪屏

java - 如何运行 servlet 过滤器?

java - 变量似乎未初始化

java - JToolTip 是否可以保留

java - JSON 解析和 NullPointer

java - 使用hibernate删除mysql中的行: Cannot delete or update a parent row

java - 如何从用户处获取 10 个数字并打印出最大的两个数字

java - 为此使用的最佳结构/模式?