TimerTask定时任务源码解析

TimerTask定时任务

1. 介绍

java.util.TimerTask是一个被Timer类执行的任务。继承Runnable接口

2. 类变量

有下面四种状态:

    int state = VIRGIN;

    static final int VIRGIN = 0;

    static final int SCHEDULED   = 1;

    static final int EXECUTED    = 2;

    static final int CANCELLED   = 3;

VIRGIN:初始化状态,任务还没有被执行

SCHEDULED:任务已经计划执行(如果不是一个重复执行的任务,它就还没有被执行过)

EXECUTED:非重复性任务已经被执行了(或者正在执行),并且没有被取消

CANCELLED:任务已经被取消(调用TimerTask.cancel)

lock:控制访问TimerTask内部的锁

 final Object lock = new Object();

nextExecutionTime:下一次任务执行的时间,如果是重复性任务,会在每一个任务执行前更新

long nextExecutionTime;

period:重复性任务的周期时间,一个正值表明是固定频率fixed-rate执行,负值表明固定延迟fixed-delay执行,0表示非重复性任务。固定频率与固定延迟区别会在Timer定时器中看着代码讲

 long period = 0;

3.成员方法

构造方法:

  protected TimerTask() {
   }

run():timerTask需要执行的具体操作,需要重写

public abstract void run();

cancel():取消任务,如果任务正在执行中,会执行完。

 public boolean cancel() {
        synchronized(lock) {
            boolean result = (state == SCHEDULED);
            state = CANCELLED;
            return result;
        }
    }

scheduledExecutionTime():最近一次执行时间

public long scheduledExecutionTime() {
        synchronized(lock) {
            return (period < 0 ? nextExecutionTime + period
                               : nextExecutionTime - period);
        }
    }

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星
实时内容请关注微信公众号,公众号与博客同时更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值