我想每小时执行一个任务,但我发现计时器只能设置周期。我的要求是:当我启动计时器时,任务将立即执行。每小时跑步一次。如果我在1:20启动程序,它将立即执行。下一次执行时间是2:00。接下来是3点,以此类推。如果我在1:20启动程序,而任务在2:00没有找到,2:00的任务将被延迟。1:20任务完成后,2:00任务立即执行。我认为jdk的计时器只提供两个任务之间的时间间隔。如果我在1:20启动程序,第二个只能在2:20执行,第三个只能在3:20执行。所以我不知道如何实现自定义计时器。
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(); 或者其他适合你的方式。
new YourTask().start();
1条答案
按热度按时间hgb9j2n61#
以下代码将在每小时开始时执行。
你第一次能像这样做
new YourTask().start();
或者其他适合你的方式。