【Java定时任务】Timer+TimerTask

本文探讨了Java中的Timer和TimerTask如何实现定时任务,以及ScheduledThreadPoolExecutor的运用。重点比较了schedule和scheduleAtFixedRate方法在并发处理上的差异。
摘要由CSDN通过智能技术生成

Timer+TimerTask可以实现定时任务

Timer定时器原理:源码是使用Object.wait(timeout)进行线程阻塞,timeout是根据下次执行时间和当前时间之差来计算。

简单来说,就是归结为一个多线程协作(互斥下的协作)

在java.util.concurrent中的ScheduledThreadPoolExecutor,也可以完全实现定时任务的功能。

而其他的框架,无非是功能的增强,特性更多,更好用,都是在基础的java之上的包装。

示例代码如下:

Timer timer = new Timer();
timer.schedule(new TimerTask() {
    @Override
    public void run() {
        System.out.println("hello world");
    }
}, 1000, 5000);

 Timer通过schedule方法执行定时任务

//delay 为多少秒后执行第一次
//period 为执行第一次后,多少秒执行一次
public void schedule(TimerTask task, long delay, long period)

//firstTime 为指定时间执行第一次
public void schedule(TimerTask task, Date firstTime, long period)

//指定时间执行一次,仅一次
public void schedule(TimerTask task, Date time)

//指定多少秒后执行一次,仅一次
public void schedule(TimerTask task, long delay)

同时,Timer还提供了scheduleAtFixedRate方法,参数及调用方式跟schedule一致。

schedulescheduleAtFixedRate的区别在于:

schedule:根据上一次任务结束的时间来算间隔时间,所以不存在并发问题,但是任务可能会被推迟。

scheduleAtFixedRate:严格按照间隔时间执行,所以可能存在并发问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值