
重点
1. shcedule()执行周期性任务相关方法和scheduledAtFixedRate()执行周期性任务相关方法的区别、联系
Tables | shcedule()执行周期性任务相关方法 | scheduledAtFixedRate()执行周期性任务相关方法 |
---|---|---|
区别 | 无追赶性 | 有追赶性 |
联系 | 任务执行延时:下一任务开始执行时刻=上一任务结束执行时刻+period | 未延时:下一任务开始执行时刻=上一任务开始执行时刻+period |
追赶性:假设任务执行周期为1,当前时刻为0,设置任务开始时间为-20(这20个间隔内可执行20个任务),
调用schedule()相关方法执行周期性任务:第一次任务开始执行时刻:0,执行[0,+无穷)这个时间段内所对应的Task任务;
调用shceduledAtFixedRate()相关方法执行周期性任务:第一次任务开始执行时刻:0。[-20,0],[0,+无穷)这两个时间段内所对应的Task任务被“补充性”地执行
2.JDK1.5后推荐用ScheduledThreadPoolExecutor代替Timer
Tables | Timer | ScheduledThreadPoolExecutor |
---|---|---|
任务调度时机 | 基于绝对时间 | 基于相对时间 |
TimerTask中出现未捕获异常时 | 会造成Timer线程终止,后续任务得不到执行 | 不存在此问题 |

参考文献
Java:如何正确使用Timer【java定时器的使用(Timer) 】
ScheduledExecutorService 与 Timer 相关题目解析
高洪岩_Java多线程编程核心技术
网友评论