java定时器Timer详解

本文详细介绍了Java的Timer类,包括常用API、调度测试,如延时调度、定时调度、循环调度和无限循环调度。讨论了scheduleAtFixedRate与schedule的区别,前者在任务延迟时会补上未执行的任务,而后者会丢弃。
摘要由CSDN通过智能技术生成

Timer 是jdk 自身提供的定时器, 可使用于实现一些简单的定时任务,如在某一时刻执行一次任务或以固定时间间隔执行任务. 一个Timer 实例可调度多个TimerTask, 底层使用队列(TaskQueue)存储, 不能并发启动定时任务. 因此, 对于复杂的定时任务, 笔者推荐使用quartz.

1. Timer 常用API

默认情况下,Timer 创建的线程为用户线程, 如果想让其为守护进程的话, 创建时需要设置isDaemon 为true.

方法签名 方法描述
public Timer(String name) 构造方法, 创建定时器, 并指定线程名称. 以定时调度线程为用户线程
public Timer(boolean isDaemon) 构造方法, 创建定时器, isDaemon 设置为trues时表示以守护线程执行
public Timer(String name, boolean isDaemon)
public void schedule(TimerTask task, long delay) 只调度一次, 延迟delay毫秒之后执行
public void schedule(TimerTask task, Date time) 只调度一次, 在具体时刻time 执行
public void schedule(TimerTask task, long delay, long period) 循环调度, 在delay毫秒之后开始,每隔period毫秒执行一次
public void schedule(TimerTask task, Date firstTime, long period) 循环调度, 在时刻firstTime开始调度, 每隔period毫秒执行一次
public void scheduleAtFixedRate(TimerTask task, long delay, long period) 和schedule方法类似, 只是错过的任务会被继续执行
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 和schedule方法类似, 只是错过的任务会被继续执行
public int purge() 清理所有已取消状态的TimerTask
public void cancel() 取消所有调度

2. 调度测试

2.1 延时调度一次

程序启动3秒之后, 执行一次

public static void main(String[] args) throws InterruptedException {
   
    // 创建定时器
    Timer timer = new Timer("myTimer");

    // 创建定时任务
    TimerTask timerTask = new TimerTask() {
   
        @Override
        public void run() {
   
            System.out.println(LocalDateTime.now() + "-hello");
        }
    };

    // 添加调度
    timer.schedule(timerTask ,3000);
}

2.2 定时调度一次

定时任务在下一分钟00秒时执行一次

public static void main(String[] args) throws InterruptedException {
   

    // 创建定时器
    Timer timer = new Timer("myTimer");

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值