使用Timer执行定时任务

简介:

一、Timer概述

在Java开发中,会碰到一些需要定时或者延时执行某些任务的需求,这时,我们可以使用Java中的Timer类实现。

二、Timer介绍

Timer是一个定时器类,通过该类可以为指定的定时任务进行配置,所在jar包路径:java.util.Timer
Timer定时器实例有多种构造方法:
Timer() // 创建一个新计时器
Timer(boolean isDaemon) //创建一个新计时器,可以指定其相关的线程作为守护程序运行
Timer(String name) //创建一个新计时器,其相关的线程具有指定的名称
Timer(String name, boolean isDaemon) //创建一个新计时器,其相关的线程具有指定的名称,并且可以指定作为守护程序运行
TimerTask类是一个定时任务类,该类实现了Runnable接口,而且是一个抽象类,所在jar包路径:java.util.TimerTask
// 可以通过继承该类,来实现自己的定时任务。
public abstract class TimerTask implements Runnable

三、Timer常用方法

在特定时间执行任务,只执行一次
public void schedule(TimerTask task,Date time)
在特定时间之后执行任务,只执行一次
public void schedule(TimerTask task, long delay)
指定第一次执行的时间,然后按照间隔时间,重复执行
public void schedule(TimerTask task, Date firstTime, long period)
在特定延迟之后第一次执行,然后按照间隔时间,重复执行

public void schedule(TimerTask task, long delay, long period)
/*参数说明
 delay: 延迟执行的毫秒数,即在delay毫秒之后第一次执行
 period:重复执行的时间间隔
*/

第一次执行之后,特定频率执行,与3效果相同

public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)

在delay毫秒之后第一次执行,后按照特定频率执行

public void scheduleAtFixedRate(TimerTask task, long delay, long period)

Timer注销

timer.cancel();

schedule()和scheduleAtFixedRate()的区别

schedule()方法更注重保持间隔时间的稳定:保障每隔period时间可调用一次
scheduleAtFixedRate()方法更注重保持执行频率的稳定:保障多次调用的频率趋近于period时间,如果任务执行时间大于period,会在任务执行之后马上执行下一次任务
四、Timer使用示例

使用Timer每隔2秒打印一次数据,并且任务在Timer启动1秒之后开始

import java.util.Timer;
import java.util.TimerTask;

public class TestTimer {

    public static void main(String[] args) {
        Timer timer = new Timer();
        timer.schedule(new MyTask(), 1000, 2000);
    }

}

class MyTask extends TimerTask {

    @Override
    public void run() {
        System.out.println("每隔2秒我就出现一次……");
    }

}

使用Timer每隔一段时间随机生成数字

import java.util.Timer;
import java.util.Random;
import java.util.TimerTask;

public class TimerTest {

    public static void main(String[] args) {
        Timer timer = new Timer();
        NewTimerTask timerTask = new NewTimerTask();
        //程序运行后立刻执行任务,每隔100ms执行一次
        timer.schedule(timerTask, 0, 100);
    }

}

class NewTimerTask extends TimerTask {

    @Override
    public void run() {
        createRandomNumber();
        createRandomNumberFromMathRandom();
    }

    //用纯Math中的方法来随机生成1-10之间的随机数
    private void createRandomNumberFromMathRandom() {
        int j = (int)(Math.round(Math.random()*10 + 1));
        System.out.println("随机生成的数字为:"+j);
    }

    //用Random类的方式来随机生成1-10之间的随机数
    private void createRandomNumber() {
         Random random = new Random(System.currentTimeMillis());
         int value = random.nextInt();
         value = Math.abs(value);
         value = value%10 + 1;
         System.out.println("新生成的数字为:" + value);
    }

}

五、小结

通过上面的两个简单示例,我们可以很清楚的知道Timer的用法:

实现TimerTask接口,并即为单元任务,我们的单次运行业务逻辑写在这里面
实例化一个Timer对象,用于启动TimerTask任务,并通过调用不同的方法设置任务的执行时间、频率
在实际的应用中,Timer多用于在夜间处理比较耗时并且数据状态稳定时候的一些后台操作,例如数据统计、数据备份等。

我的github地址:http://github.com/biezhi
开源框架Blade:http://github.com/biezhi/blade

目录
相关文章
|
1月前
|
缓存 Java UED
仅执行一次的定时任务如何设置?
【10月更文挑战第12天】仅执行一次的定时任务如何设置?
74 1
|
11月前
CompletableFuture在超时后,能够停止执行吗?
CompletableFuture在超时后,能够停止执行吗?
153 0
setInterval()的定时任务没执行如何解决
setInterval()的定时任务没执行如何解决
|
Linux Go API
GO的定时器Timer 和定时任务cron
GO的定时器Timer 和定时任务cron
|
Java 测试技术
在多线程中自定义实现定时器(Timer)
在多线程中自定义实现定时器(Timer)
|
Java
(Java)定时器Timer——让你的程序定时执行
(Java)定时器Timer——让你的程序定时执行
131 0
(Java)定时器Timer——让你的程序定时执行
|
调度
丁岚-timer定时任务
Timer是java.util提供的一个定时器,可以完成一些简单的定时任务,使用TimeTask以及Timer来实现
223 0
丁岚-timer定时任务
|
API 调度 Android开发
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
912 0
|
Java
Java 中Timer和TimerTask 定时器和定时任务使用的例子
<p>转自:<a target="_blank" href="http://blog.csdn.net/kalision/article/details/7692796">http://blog.csdn.net/kalision/article/details/7692796</a></p> <p><span style="font-family:Arial; font-size:14
5035 0
|
Java Spring
定时器Cron配置方法
Quartz Cron表达式主要用于JAVA Spring定时任务中,用法如下: # 每月的最后1天 @Scheduled(cron = "0 0 18 28–31 * ?") public void doAtLastDayOfMonth() { final Calendar calendar = Calendar.
3496 0