Saw*_*yer 105 java scheduled-tasks scheduledexecutorservice
ScheduledExecutorService的主要区别scheduleAtFixedRate和scheduleWithFixedDelay方法是什么?
scheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
System.out.println("scheduleAtFixedRate: " + new Date());
}
}, 1, 3L , SECONDS);
scheduler.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println("scheduleWithFixedDelay: " + new Date());
}
}, 1, 3L , SECONDS);
Run Code Online (Sandbox Code Playgroud)
它们在同一时间打印完全相同,似乎它们以完全相同的间隔执行.
Jon*_*eet 180
尝试Thread.sleep(1000);在您的run()方法中添加一个调用...基本上,根据前一个执行结束的时间和它(逻辑上)开始时的时间安排.
例如,假设我安排一个警报以每小时一次的固定速率启动,每次关闭时,我都会喝一杯咖啡,需要10分钟.假设从午夜开始,我会:
00:00: Start making coffee
00:10: Finish making coffee
01:00: Start making coffee
01:10: Finish making coffee
02:00: Start making coffee
02:10: Finish making coffee
Run Code Online (Sandbox Code Playgroud)
如果我安排一个小时的固定延迟,我会:
00:00: Start making coffee
00:10: Finish making coffee
01:10: Start making coffee
01:20: Finish making coffee
02:20: Start making coffee
02:30: Finish making coffee
Run Code Online (Sandbox Code Playgroud)
你想要哪一个取决于你的任务.
Ken*_*ock 49
可视化调用scheduleAtFixedRate方法的时间序列.如果最后一次执行时间超过句点,则立即开始下一次执行.否则,它将在一段时间后开始.

时间序列的调用scheduleWithFixedDelay方法.下一次执行将在一次执行终止和下一次执行开始之间的延迟时间之后开始,而不管其执行时间如何

希望可以帮到你
小智 8
该scheduleAtFixedRate()方法会创建一个新任务,并在每个周期将其提交给执行器,而不管上一个任务是否完成。
另一方面,该scheduleWithFixedDelay()方法在前一个任务完成后创建一个新任务。
如果你读一下Java Doc就会更清楚
ScheduledFuture ScheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit) 创建并执行一个周期性操作,该操作首先在给定的初始延迟之后启用,然后在给定的周期内启用;也就是说,执行将在initialDelay之后开始,然后是initialDelay+period,然后是initialDelay + 2 * period,依此类推。
ScheduledFuture ScheduleWithFixedDelay(Runnable command, longinitialDelay, longdelay, TimeUnitunit) 创建并执行一个周期性操作,该操作在给定的初始延迟之后首先启用,然后在一个执行终止和下一个执行开始之间具有给定的延迟。
| 归档时间: |
|
| 查看次数: |
52534 次 |
| 最近记录: |