定时器Timer

定时器使用

Timer类的主要作用就是设置计划任务,但封装任务的类却是TimerTask类
执行计划任务的代码要放入TimerTask的子类中,因为TimerTask是一个抽象类。

schedule (TimerTask task,Date time)

该方法的作用是在指定的日期执行一次某一任务。
在这里插入图片描述
在这里插入图片描述

查看构造方法可以得知,创建一个Timer就是启动一个新的线程,这个新启动的线程并不是守护线程,它一直在运行。
在这里插入图片描述
这样程序运行后迅速结束当前进程。

TimerTask是以队列的方式一个一个被顺序执行的,所以执行的时间有可能和预期的时间不一致,因为前面的任务有可能消耗的时间较长,则后面的任务运行的时间也会被延迟。

schedule(TimerTask task, Date firstTime, long period)

该方法的作用是在指定的日期之后,按指定的间隔周期性地无限循环地执行某一任务。

在这里插入图片描述
TimerTask 类的cancel()方法
TimerTask类中的cancel()方法的作用是将自身从任务队列中清除。
在这里插入图片描述
Timer类的cancel()方法
和TimerTask类中的cancel()方法清除自身不同,Timer类中的cancel()方法的作用是将任务队列中的全部任务清空。

在这里插入图片描述
Timer类中的 cancel()方法有时并没有争抢到queue锁,所以 TimerTask类中的任务继续正常执行。

schedule(TimerTask task, long delay)

该方法的作用是以执行schedule ( TimerTask task, longdelay)方法当前的时间为参考时间,在此时间基础上延迟指定的毫秒数后执行一次TimerTask任务。

schedule(TimerTask task, long delay, long period)

该方法的作用是以执行schedule ( TimerTask task, long delay, long period)方法当前的时间为参考时间,在此时间基础上延迟指定的毫秒数,再以某一间隔时间无限次数地执行某一任务。

scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

方法 schedule和方法 scheduleAtFixedRate都会按顺序执行,所以不要考虑非线程安全的情况。方法 schedule和 scheduleAtFixedRate主要的区别只在于不延时的情况。
使用schedule方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“开始”时的时间来计算。
使用scheduleAtFixedRate方法:如果执行任务的时间没有被延时,那么下一次任务的执行时间参考的是上一次任务的“结束”时的时间来计算。
延时的情况则没有区别,也就是使用schedule或scheduleAtFixedRate方法都是如果执行任务的时间被延时,那么下一次任务的执行时间参考的是上一次任务“结束”时的时间来计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lhj_loveFang_1105

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值