Java定时器

今天研究了一下Java的定时器,下面简单说一下并给出案例
## 简介 ##
定时器顾名思义就是起到定时作用,定时执行任务,启动一个定时器,其底层就会启动一个线程,你也可以理解,定时器是就是定时启动一个线程去执行你所要执行的任务!!
要了解定时器,做要了解jdk带的“Timer”和“TimerTask”,

  • Timer:我理解是定时器的工具,起到定时作用,和你所要执行的内容无关。
  • TimerTask是一个接口共实现,这个接口底层又实现了线程接口Runnable,所有必须重写 run方法, 这也印证了上面我说的定时器是启动线程执行任务!

    Timer主要有几个构造方法:
    1.time.schedule(TimerTask task, Date time);参数 task是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间!
    2.time.schedule(TimerTask task, Date time,Long long); 是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间! long 是Long对象,是循环间隔时间!
    3.boolean cancel():用于取消计时器任务。
    4.scheduleAtFixedRate(TimerTask task, Date time, long long):是TimerTask对象,就是你所要执行的任务, time 是Date对象,是启动时间! long 是Long对象,是循环间隔时间!
    注意:
    time.schedule(TimerTask task, Date time,Long long)和scheduleAtFixedRate(TimerTask task, Date time, long long) 这两个构造方法看是一样,但是内部不一样:
    schedule(TimerTask task, Date time,Long long):如果执行任务的时间没有被延时,那么下一次执行时间参考上一次任务的“开始”时间来计算
    scheduleAtFixedRate(TimerTask task, Date time, long long):如果执行任务的时间没有被延时,那么下一次执行时间参考上一次任务的“结束”时间来计算
    简单定时任务案例:

package Thread;

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

public class Test3 {

private static Timer time=new Timer();//初始化定时器工具
 public static void main(String[] args) {
    try {
        MyTask1 mt=new MyTask1();//初始化定时任务
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String strTime="2017-09-01 15:22:00";
        Date date=sdf.parse(strTime);//设置定时器起始时间
        time.schedule(mt, date);

    } catch (Exception e) {
        e.printStackTrace();
    }

}
}

/**
 * 定时任务
 * @author user
 *
 */
class MyTask1 extends TimerTask{

    /**
     * 所要定时的内容写在run里面
     */
    @Override
    public void run(){
        try {
            System.out.println("运行了MyTASK 开始运行时间:"+new Date().toLocaleString());
            Thread.sleep(3000);//暂停3秒
            System.out.println("运行了MyTASK 结束运行时间:"+new Date().toLocaleString());

        } catch (Exception e) {
            e.printStackTrace();


    }
}

}

控制台打印结果:
这里写图片描述
可以看出来运行时间和设定时间一致!

循环案例

package Thread;

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

public class Test1 {
   private static Timer time=new Timer();
   public static void main(String[] args) {
    try {
            MyTask mt= new MyTask();
            SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String strTime="2017-09-01 16:19:00";
            Date date=sdf.parse(strTime);
            time.schedule(mt,date,2000);//循环
    } catch (Exception e) {
        e.printStackTrace();
    }

}
static class MyTask extends TimerTask{

    @Override
    public void run(){
        try {
            System.out.println("运行了MyTASK 开始运行时间:"+new Date().toLocaleString());


        } catch (Exception e) {
            e.printStackTrace();

        }
    }
}
}

这里写图片描述

可以看出来每隔两秒执行一次

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值