java多线程编写计时器_Java多线程编程核心技术3——定时器Timer

Timer类的主要作用是设置计划任务,但封装任务的却是TimerTask类。

1.Timer.schedule(TimerTask task,Date time):在指定日期执行某一次任务。

任务执行完进程不会销毁,创建1个Timer就是启动一个新的线程,该线程不是守护线程,会一直运行下去。

方案:Timer timer = new Timer(true);//设置其为守护线程

2.Timer中允许多个TimerTask任务

TimerTask是以队列的方式一个一个执行的,所以预期的执行时间可能和真实的执行时间不一样。可能前面的任务耗时过长,那么后面的任务运行时间也会被延后。

3.Timer.schedule(TimerTask task,Date firstTime,long period):在指定日期之后的间隔周期,无限循环的执行某一个任务。

ps,若计划时间早于当前时间,则立即执行task任务。

4. TimerTask的cancel():将自身从任务队列中清楚,其他任务不受影响。

Timer类的cancel():将任务队列中的所有任务清空。ps,并一定会马上停止所有任务,原因在于Timer类中的cancel()有时并没有争抢到queue锁,而让TimerTask类中的任务继续执行。

5.Timer.schedule(TimerTask task,long delay):在当前时间的基础上延迟多长时间执行任务。

6.Timer.schedule(TimerTask task,long delay,long period):在当前时间的基础上延迟多长时间执行任务,再以某一时间间隔执行任务。

7.Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)

schedule方法和scheduleAtFixedRate方法都是按顺序执行的,所以不用担心非线程安全的问题。

schedule方法和scheduleAtFixedRate方法的区别在于:

schedule不具有追赶性;

scheduleAtFixedRate具有追赶性,即如果计划时间早于当前时间,这个时间段内的task会被“补充性”的执行下。

Timer可以用于Android技术中,实现类似于轮询、动画等功能。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值