Timer定时器

  • 前言
  • 架构
  • 代码
  • 定义测试环境
  • 简单实现调度
  • 原理接口
  • 总结一 :
  • 关于 cancel()
  • 简单实现Cancel
  • 关于 TimerTask -- scheduledExecutionTime()
  • 关于 timer方法purge
  • 总结


前言

timer任务调度工具,定时器:

是java自带的调度工具。可以实现简单的定时任务调度。线程为单线程,不可存在并

发。通过实现TimerTask类来实现里面的Run方法,通过Timer的Schedoule方法实现

架构

java定时器架构 java定时器框架_Timer

代码

继承timerTask,重写线程

public class MyTimerTaske extends TimerTask {


    private String name;

    public MyTimerTaske(String name) {
        this.name = name;
    }

    @Override
    public void run() {
        System.out.println("hello,java:我说线程----" + name);
        // 设置时间
        Calendar instance = Calendar.getInstance();
        // 设置格式
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 输出当前时间
        System.out.println("当前时间为"+simpleDateFormat.format(instance.getTime()));

    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

java定时器架构 java定时器框架_Timer_02

定义测试环境
public class TimerDemo {


    public static void main(String[] args) {
        // 定义一个timer
        Timer timer = new Timer();
        // 创建一个TimerTasker类
        MyTimerTaske myTimerTaske = new MyTimerTaske("NO1");
        // 创建时间
        Calendar instance = Calendar.getInstance();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 输出当前时间
        System.out.println(simpleDateFormat.format(instance.getTime()));

        // 设置秒数为之后的3秒后
        instance.add(Calendar.SECOND,3);
        // TODO step1 当时间到秒数3秒之后执行此线程
        // timer.schedule(myTimerTaske,instance.getTime());
        // System.out.println("任务执行结束,传参只设置了,调用线程,和调用线程时间没有调用重复线程");

        // System.out.println("-------------------------------------------------第二个------------------------------------------------------");

        // TODO step2 线程二,继续调用定时和任务,并且间隔2秒之后重复调用
        // myTimerTaske.setName("NO2");
        // timer.schedule(myTimerTaske,instance.getTime(),2000);


        System.out.println("-------------------------------------------------第三个------------------------------------------------------");

        // TODO step2 线程三,调用定时任务,delay距离当前时间多久,单位毫秒
        myTimerTaske.setName("NO3");
        timer.schedule(myTimerTaske,2000);

    }

}
简单实现调度

java定时器架构 java定时器框架_Timer_03

原理接口

java定时器架构 java定时器框架_Timer_04


java定时器架构 java定时器框架_简单实现_05

java定时器架构 java定时器框架_Timer_06


java定时器架构 java定时器框架_System_07


java定时器架构 java定时器框架_java定时器架构_08


java定时器架构 java定时器框架_Timer_09


java定时器架构 java定时器框架_System_10

总结一 :

scheduleAtFixedRate 跟 schedule区别多了一个判断,都调用了sched方法

java定时器架构 java定时器框架_System_11

关于 cancel()

队列线程停止,队列设为空

java定时器架构 java定时器框架_简单实现_12


java定时器架构 java定时器框架_java定时器架构_13

简单实现Cancel

java定时器架构 java定时器框架_java_14


java定时器架构 java定时器框架_System_15


java定时器架构 java定时器框架_简单实现_16

关于 TimerTask – scheduledExecutionTime()

java定时器架构 java定时器框架_java_17

java定时器架构 java定时器框架_System_18

java定时器架构 java定时器框架_java_19


默认为0l 返回period+或者-的long类型时间,也就是将要执行的时间。

java定时器架构 java定时器框架_System_20


java定时器架构 java定时器框架_Timer_21

关于 timer方法purge

java定时器架构 java定时器框架_java_22


队列中移除的调用任务计数

总结

java定时器架构 java定时器框架_System_23