Timer详解(一)

## Timer

Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。

## TimerTask

一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度,如果想两个TimerTask并发执行,则需要创建两个Timer。

下面是一个简单的demo:

  1. 新建一个TimerTask实例
package lxd.timer.demo;

import java.util.TimerTask;

/**
 * 
 * 任务调度timer demo.
 * 
 * <pre>
 *  任务调度timer demo.
 * </pre>
 * 
 * @author 李晓东
 * 
 * 2017.05.21
 * 
 * @since 1.0
 *
 */
public class MyTimerTask extends TimerTask {

    private String name;

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

    @Override
    public void run() {
        System.out.println("current timeTask name: " + name);
    }

    public String getName() {
        return name;
    }

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

}

2.调用MyTimerTask

package lxd.timer.demo;

import java.util.Timer;

/**
 * 
 * TimeTask调用demo
 * 
 * <pre>
 *  TimeTask调用demo
 * </pre>
 * 
 * @author 李晓东
 * 
 * 2017.05.21
 * 
 * @since 1.0
 *
 */
public class MyTimer {

    public static void main(String[] args) {
        //1.创建Timer实例
        Timer timer = new Timer();
        //2.创建TimerTask
        MyTimerTask timerTask = new MyTimerTask("001Task");
        //3.设定两秒后执行任务,以后每隔一秒执行一次
        timer.schedule(timerTask, 2000L, 1000L);
    }

}

Timer的定时调度函数

  1. schedule的四种用法

    • schedule(task,time)

参数

task -所要安排的任务
time -执行任务的时间

作用:在时间等于或超过time的时候执行且仅执行一次task
- schedule(task,time, period)

参数

task -所要安排的任务
time -执行任务的时间
period -执行一次task的时间间隔,单位毫秒

作用:时间等于或超过time时首次执行task,之后每隔period毫秒重复执行一次task

  • schedule(task, delay)

参数

task -所要安排的任务
delay -执行任务前的延迟时间,单位是毫秒

作用:等待delay毫秒后执行且仅执行一次task

  • schedule(task, delay, period)

参数

task -所要安排的任务
delay -执行任务前的延迟时间,单位是毫秒
period -执行一次task的时间间隔,单位是毫秒

作用:等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task

  1. scheduleAtFixedRate的两种用法

    • scheduleAtFixedRate(task, time, period)

参数

task -所要安排的任务
time -执行任务的时间
period -执行一次task的时间间隔,单位毫秒

作用:时间等于或超过time时首次执行task,之后每隔period毫秒重复执行一次task

  • scheduleAtFixedRate(task, delay, period)

参数

task -所要安排的任务
delay -执行任务前的延迟时间,单位是毫秒
period -执行一次task的时间间隔,单位是毫秒

作用:等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task

下面定时调度函数的demo,timeTask依旧使用上方自定义的MyTimeTask

package lxd.timer.demo;

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

/**
 * 
 * TimeTask调用demo
 * 
 * <pre>
 *  TimeTask调用demo
 * </pre>
 * 
 * @author 李晓东
 * 
 * 2017.05.21
 * 
 * @since 1.0
 *
 */
public class MyTimer {

    public static void main(String[] args) {
        //1.创建Timer实例
        Timer timer = new Timer();
        //2.创建TimerTask
        MyTimerTask timerTask = new MyTimerTask("001Task");
        /*
         * 获取当前时间,并设置成距离当前时间三秒之后的时间
         * 
         */
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("timer 类中 当前时间:" + sf.format(calendar.getTime()));
        calendar.add(Calendar.SECOND, 3);

        /*
         * schedule的第一种用法
         * schedule(task,time)
         * 在时间等于或超过time的时候执行且仅执行一次task
         */
//      timerTask.setName("schedule1");
//      timer.schedule(timerTask, calendar.getTime());
        /*
         * schedule的第二种用法
         * schedule(task,time, period)
         * 时间等于或超过time时首次执行task,之后每隔period毫秒重复执行一次task
         */
//      timerTask.setName("schedule2");
//      timer.schedule(timerTask, calendar.getTime(), 2000);
        /*
         * schedule的第三种用法
         * schedule(task, delay)
         * 等待delay毫秒后执行且仅执行一次task
         */
//      timerTask.setName("schedule3");
//      timer.schedule(timerTask, 3000);
        /*
         * schedule的第四种用法
         * schedule(task, delay, period)
         * 等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task
         */
//      timerTask.setName("schedule4");
//      timer.schedule(timerTask, 3000, 2000);

        /*
         * scheduleAtFixedRate的第一种用法
         * scheduleAtFixedRate(task, time, period)
         * 时间等于或超过time时首次执行task,之后每隔period毫秒重复执行一次task
         */
//      timerTask.setName("scheduleAtFixedRate1");
//      timer.scheduleAtFixedRate(timerTask, calendar.getTime(), 3000);

        /*
         * scheduleAtFixedRate的第二种用法
         * scheduleAtFixedRate(task, delay, period)
         * 等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task
         */
        timerTask.setName("scheduleAtFixedRate2");
        timer.scheduleAtFixedRate(timerTask, 2000, 3000);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值