加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何安排每小时开始的任务

发布时间:2020-12-14 06:01:09 所属栏目:Java 来源:网络整理
导读:我正在开发一种服务,假设每个小时的开始时间(1:00 PM,2:00 PM,3:00 PM等)都是正确的. 我尝试以下,但它有一个问题,我第一次必须在开始时运行程序,然后这个调度程序将重复. ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(
我正在开发一种服务,假设每个小时的开始时间(1:00 PM,2:00 PM,3:00 PM等)都是正确的.

我尝试以下,但它有一个问题,我第一次必须在开始时运行程序,然后这个调度程序将重复.

ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleWithFixedDelay(new MyTask(),1,TimeUnit.HOURS);

任何建议重复我的任务,不管我运行程序?

问候,
伊姆兰

解决方法

我也建议 Quartz这个.但是,上述代码可以使用initialDelay参数在小时开始时运行.
Calendar calendar = Calendar.getInstance();
ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(new MyTask(),millisToNextHour(calendar),60*60*1000,TimeUnit.MILLISECONDS);



private static long millisToNextHour(Calendar calendar) {
    int minutes = calendar.get(Calendar.MINUTE);
    int seconds = calendar.get(Calendar.SECOND);
    int millis = calendar.get(Calendar.MILLISECOND);
    int minutesToNextHour = 60 - minutes;
    int secondsToNextHour = 60 - seconds;
    int millisToNextHour = 1000 - millis;
    return minutesToNextHour*60*1000 + secondsToNextHour*1000 + millisToNextHour;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读