Java-Timer 时间定时调度

Timer 定义:有且仅有一个后台线程多个业务线程 进行定时定频率的调度
主要构件

1. TimerTask: MyTimerTask.java


package com.dsp.timer;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;

public class MyTimerTask extends TimerTask {

    private String name;

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

    @Override
    public void run() {
        String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        System.out.println(time + ":current timer task name =" + name);
    }

    public String getName() {
        return name;
    }

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

2. Test: MyTimer.java

package com.dsp.timer;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;

public class MyTimer {
public static void main(String[] args) {
        Timer timer = new Timer();
        MyTimerTask task = new MyTimerTask("NO.1");
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String time = simpleDateFormat.format(new Date());
        System.out.println("current time=" + time);
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MINUTE, -1);
        System.out.println(simpleDateFormat.format(calendar.getTime()));

        //time时间执行task一次
//      timer.schedule(task, new Date()); //timer.schedule(task, time);
        //2s后执行一次,间隔3s执行多次task 
//      timer.schedule(task, 2000L, 3000L);
        //从当前时间开始,3s后执行一次
//      timer.schedule(task, 3000L);//timer.schedule(task, delay);

        //1.calendar.getTime()在当前时间之前,立即执行一次,然后每间隔3s执行一次
        //2.calendar.getTime()在当前时间之后,calendar.getTime()的时候执行一次,然后每间隔3s执行一次
//      timer.schedule(task, calendar.getTime(), 3000L);//timer.schedule(task, firstTime, period);

//      timer.scheduleAtFixedRate(task, calendar.getTime(), 3000L);

        timer.scheduleAtFixedRate(task, 1000L, 3000L);

        // 终止此计时器,丢弃所有当前已安排的任务。
        //timer.cancel();

        // 从此计时器的任务队列中移除所有已取消的任务。
        timer.purge();

    }

}

schedule & scheduleAtFixedRate的区别

schedule:下一次的执行时间点=上一次程序执行完成的时间点+间隔时间。方法更注重保持间隔时间的稳定。
scheduleAtFixedRate:下一次的执行时间点=上一次程序开始执行的时间点+间隔时间 ;并且因为前一个任务要执行6秒,而当前任务已经开始执行了,因此两个任务间存在重叠,需要考虑线程同步。方法更注重保持执行频率的稳定。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值