使用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

时间: 2024-10-02 04:38:44

使用Timer执行定时任务的相关文章

使用Timer和ScheduledThreadPoolExecutor执行定时任务

定时任务是在指定时间执行程序,或周期性执行计划任务.Java中实现定时任务的方法有很多,主要JDK自带的一些方法以及开源程序如Qurtz. 1.Timer和TimerTask Timer只是充当了一个执行者的角色,真正的任务逻辑是通过一个叫做TimerTask的抽象类完成的,TimerTask也是java.util包下面的类, 它是一个实现了Runnable接口的抽象类,包含一个抽象方法run( )方法,需要我们自己去提供具体的业务实现. Timer 的优点在于简单易用,但由于所有任务都是由同一

java关于Timer schedule执行定时任务

  公司技术人员在实现内部办公系统与外部网站一体化的时候,最重要的步骤就是从OA系统读取数据,并且根据网站模板生成最终的静态页面.这里就需要一个定时任务,循环的执行. 技术人员在写定时任务的时候,想当然的以为Timer.schedule(TimerTask task, long delay)就是重复的执行task.程序运行后发现只运行了一次,总觉得是task里的代码有问题,花了很长时间调试代码都没有结果. 仔细研读java api,发现: schedule(TimerTask task, lon

详解PHP实现执行定时任务_php技巧

PHP在这方面应该说是比较弱,如果只用php去实现可以如下: <?php ignore_user_abort();//关闭浏览器后,继续执行php代码 set_time_limit(0);//程序执行时间无限制 $sleep_time = 1;//多长时间执行一次 do{ $fp = fopen('test.txt','a+'); fwrite($fp,"这是一个php博客:phpddt.com \n"); fclose($fp); sleep($sleep_time); }wh

使用java执行定时任务示例_java

下面是个简单的例子,利用java实现距离run后一个小时后执行任务! 复制代码 代码如下: Timer timer = new Timer();TimerTask task = new TimerTask() {@Overridepublic void run() { System.out.println("待执行的任务..."); }};timer.schedule(task, 60*60*1000);

详解PHP执行定时任务的实现思路_php技巧

PHP本身是没有定时功能的,PHP也不能多线程.PHP的定时任务功能必须通过和其他工具结合才能实现,例如WordPress内置了wp-cron的功能,很厉害. 一.Linux服务器上使用CronTab定时执行php 我们先从相对比较复杂的服务器执行php谈起.服务器上安装了php,就可以执行php文件,无论是否安装了nginx或Apache这样的服务器环境软件.而Linux中,使用命令行,用CronTab来定时任务,又是绝佳的选择,而且也是效率最高的选择. 首先,进入命令行模式.作为服务器的li

system.timers.timer执行问题。

问题描述 我的代码如下.我只设置一个timer1数组,但执行出来却有两个结果.执行结果为[0]+当前时间,[1]+当前时间,我希望的结果为[0]+当前时间就可以了,后面[1]+当前时间是怎么来的?privatevoidstart_Click(objectsender,EventArgse){StartProcc();}///<summary>///启动程序///</summary>privatevoidStartProcc(){ArrayListurl=newArrayList()

MySql如何执行定时任务

  Mysql属于中小型数据库系统,它的事件调度器Event Scheduler是在mysql 5.1才开始引入事件调度器是在 MySQL 5.1 中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器才能完成的定时功能.事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器".触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句.事件是由一个特定的线程来管理的,也就是所谓的"事件调度器&quo

ASP中实现执行定时任务的方法_应用技巧

一个很常见的 ASP 问题 : "如何定时工作流程执行网页?", 之所以会问这个问题大部分是因为管理员可能会利用一个 ASP 网页来作数据库维护的动作, 如备份, 在 Windows NT 平台有一个方法可以做工作流程, 那就是 AT 指令 + Schedule 服务,就是计划任务, 但很可惜的是你并没有法度在命令列 (Command-Line) 执行 ASP 网页 . 当然你可以在命令列执行 IE 并告诉它要求执行的网页, 例如: c:\program files\internet

使用spring @Scheduled注解执行定时任务

java applicationContext.xml配置: 添加命名空间:  代码如下 复制代码 xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd" &