我正在使用 ScheduledExecutorService
有时任务可能运行3小时才能完成 pollMergeFiles.searchForFileAndExecute()
方法,有时可能需要不到2分钟的时间来完成。
我唯一的问题是 scheduler.scheduleAtFixedRate
是否每10分钟执行一次,延迟5分钟,或者等待上一个任务运行完成,然后才开始新任务?
private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
...
PollMergeFiles pollMergeFiles = new PollMergeFiles();
final Runnable service = new Runnable() {
public void run() {
try {
if (counter <= 256) {
pollMergeFiles.searchForFileAndExecute();
} else if (counter > 256) {
logger.info(
"Shutdown the scheduler service since all counters were processed");
scheduler.shutdown();
}
} catch (Exception e) {
logger.error("Exception found", e);
}
}
};
scheduler.scheduleAtFixedRate(service, 5, 10, TimeUnit.Minutes);
1条答案
按热度按时间bgtovc5b1#
您可以查看java文档https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/scheduledexecutorservice.html .
scheduleatfixedrate(runnable命令,long initialdelay,long period,timeunit)创建并执行一个周期性动作,该动作在给定的初始延迟后首先启用,然后在给定的时间段内启用;也就是说,执行将在initialdelay之后开始,然后是initialdelay+period,然后是initialdelay+2*period,依此类推。
因此scheduleatfixedrate()不会等待最后一个任务完成。它将以预定义的间隔(期间字段)执行。
schedulewithfixeddelay(runnable命令,long initialdelay,long delay,timeunit)创建并执行一个周期性动作,该动作在给定的初始延迟后首先启用,然后在一次执行结束和下一次执行开始之间具有给定的延迟。
但是schedulewithfixeddelay()方法可以在执行最后一个任务后等待预定义的时间(延迟字段)。