如何实现一个在精确时间内执行的计时器?

c86crjj0  于 2021-07-11  发布在  Java
关注(0)|答案(1)|浏览(421)

我想每小时执行一个任务,但我发现计时器只能设置周期。
我的要求是:
当我启动计时器时,任务将立即执行。
每小时跑步一次。如果我在1:20启动程序,它将立即执行。下一次执行时间是2:00。接下来是3点,以此类推。
如果我在1:20启动程序,而任务在2:00没有找到,2:00的任务将被延迟。1:20任务完成后,2:00任务立即执行。
我认为jdk的计时器只提供两个任务之间的时间间隔。如果我在1:20启动程序,第二个只能在2:20执行,第三个只能在3:20执行。所以我不知道如何实现自定义计时器。

hgb9j2n6

hgb9j2n61#

以下代码将在每小时开始时执行。

Calendar calendar = Calendar.getInstance();
 ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
 scheduler.scheduleAtFixedRate(new YourTask(), 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;
    }

你第一次能像这样做 new YourTask().start(); 或者其他适合你的方式。

相关问题