集成框架 -- Timer定时器

本文深入探讨了Java中Timer定时器的使用与原理,包括如何通过实现TimerTask类的run方法来设定定时任务,以及如何利用Timer的schedule方法进行任务调度。文章详细介绍了通过Calendar和SimpleDateFormat设置定时任务的具体实现,同时对比了scheduleAtFixedRate与schedule方法的区别,并讲解了cancel方法和purge方法的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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

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

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

架构

在这里插入图片描述

代码

继承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;
    }
}

在这里插入图片描述

定义测试环境

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);

    }

}

简单实现调度

在这里插入图片描述

原理接口

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结一 :

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

在这里插入图片描述

关于 cancel()

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

在这里插入图片描述
在这里插入图片描述

简单实现Cancel

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关于 TimerTask – scheduledExecutionTime()

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
默认为0l 返回period+或者-的long类型时间,也就是将要执行的时间。

在这里插入图片描述
在这里插入图片描述

关于 timer方法purge

在这里插入图片描述
队列中移除的调用任务计数

总结

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值