任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。

举个例子,比如说我们希望一个系统每周日晚上9点都将数据库文件备份一次,这时我们就可以使用任务调度来实现。为了更加的方便,我们需要在tomcat启动后,自动开始这个调度。

下面是TimerTask的API:



下面是Timer类的API

下面的例子中实现了两个功能:

1.监测tomcat的web容器的启动与关闭

2.当web容器启动后,任务调度分配任务对象,时间和周期。

为了监测web容器的变化,首先需要在web.xml中注册监听器

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- 添加监听器 TimerListener为自定义的类,见下方-->
<listener >
<listener-class>com.util.TimerListener</listener-class>
</listener> <display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>

第二步,定义一个任务对象,基础TimerTask

package com.util;

import java.util.Timer;
import java.util.TimerTask; /**
* 1.定义一个任务对象
* JDK -- 任务对象需要继承TimerTask
*
*/
public class DataBackup extends TimerTask{ @Override
public void run() {
//描述当前任务需要执行的任务内容
System.out.println("连接数据库将表结和数据备份到本地的sql文件中"); } }

第三步.监测web容器的变化,当web容器启动后,为任务调度分配时间和周期,下面的代码中包含了几个例子

package com.util;

import java.util.Date;
import java.util.Timer; import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; public class TimerListener implements ServletContextListener{ private static Timer timer;
/**
* 监听web容器关闭
*/
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("web容器关闭");
timer.cancel();
} /**
* 监听web容器启动
*/
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("web容器启动");
/**
* 准备Timer计使器
*/
timer = new Timer();
System.out.println("计时器处于准备工作,开始为任务调度分配时间和周期");
//创建任务对象
DataBackup backup = new DataBackup();
//1 schedule(TimerTask task,Data time)
//安排指定的任务在指定的时间开始执行
//月份要减一
//timer.schedule(backup, new Date(115,8,10,9,54,0)); //2 schedule(TimerTask task, Date firstTime, long period)
// 安排指定的任务在指定的时间开始进行重复的固定延迟执行
//timer.schedule(backup,new Date(115,8,10,10,0,0) ,2000 ); //3schedule(TimerTask task, long delay)
//安排在指定延迟后执行指定的任务。
//timer.schedule(backup, 5000); //4 schedule(TimerTask task, long delay, long period)
//timer.schedule(backup, 5000, 2000); //5.每天早上9点出发一次任务
//timer.schedule(backup,new Date(115,8,11,9,0,0) ,24*60*60*1000); //6.每星期六的凌晨3点出发一次任务
//timer.schedule(backup, new Date(115,8,12,3,0,0),7*24*60*60*1000); } }

这样,当tomcat启动后,任务对象就会按照你分配时间和周期开始执行。

总结:使用Timer实现任务调度,首先创建定义任务对象,比如这里的Backup;然后实例化一个Timer,并实例化任务对象,按照需求调用相对应的方法为任务对象分配时间和周期。以上就是任务调度的实现,至于什么时候开始这个计时器,即什么时候开始实例化Timer,则需要根据实际情况来确定,比如上面的代码就是当web容器启动后开始计时器。

版权声明:本文为博主原创文章,未经博主允许不得转载。

任务调度--使用java.util.Timer实现的更多相关文章

  1. 使用java.util.Timer来周期性的执行制定的任务

    使用java.util.Timer来周期性的执行制定的任务 public class HandlerTest extends Activity { int[] images = new int[] { ...

  2. java.util.Timer demo good

    package timer; import java.util.Date; import java.util.Timer; import java.util.TimerTask; import org ...

  3. java.util.Timer类似于闹钟定时做任务

    在web中实现任务计划,相当于实现闹钟的功能,要完成2个步骤: 1.定时器的设置: 2.对这个定时器的启动运行和停止进行实时监听 java.util.Timer定时器,实际上是个线程,定时调度所拥有的 ...

  4. Java基础复习--java.util.Timer定时任务

    在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下. (1)sche ...

  5. java.util.Timer简介

    Timer是用于管理在后台执行的延迟任务或周期性任务,其中的任务使用java.util.TimerTask表示.任务的执行方式有两种: 按固定速率执行:即scheduleAtFixedRate的两个重 ...

  6. java.util.Timer分析源码了解原理

    Timer中最主要由三个部分组成: 任务 TimerTask .  任务队列: TaskQueue queue 和 任务调试者:TimerThread thread 他们之间的关系可以通过下面图示: ...

  7. java倒计时使用java.util.Timer实现,使用两个线程,以秒为单位

    public class Countdown3 { private int lin; private int curSec; public Countdown3(int lin)throws Inte ...

  8. 几种任务调度的 Java 实现方法与比较Timer,ScheduledExecutor,Quartz,JCronTab

    几种任务调度的 Java 实现方法与比较 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quar ...

  9. 几种任务调度的 Java 实现方法与比较

    综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...

随机推荐

  1. linu下C语言之BMP图片操作编程(上)

    BMP文件格式,也被称为位图图像文件或与设备无关的位图文件格式(DIB)或者只是一个位图,是 一个光栅图形 图像文件格式使用 来存储位图,数字,图片,独立的显示设备. 微软已经定义了一个特定的表示颜色 ...

  2. 使用IO映射的方式获取tiny4412板子上的ID号

    在以前的文章中,有一篇 基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号 在那篇文章中,具体可以参考.那时候我使用了简单的字符设备驱动框架,最终的ID号通过read方法可将 ...

  3. shim & polyfill

    在JavaScript中,经常提到shim和polyfill,polyfill是shim的一种.shim 是将不同 api 封装成一种,比如 jQuery 的 $.ajax 封装了 XMLHttpRe ...

  4. MongoDB学习笔记(三)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  5. rotate image(旋转数组)

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

  6. JVM的运行原理以及JDK 7增加的新特性(一)

    虚拟机(Virtual Machine) JRE是由Java API和JVM组成的.JVM的主要作用是通过Class Loader来加载Java程序,并且按照Java API来执行加载的程序. 虚拟机 ...

  7. 一个resin启动bug的解决

    这个bug的问题后来被确认为Resin所在目录层有中文目录名.--------------------------------------------------------------------- ...

  8. /usr/lib/uwsgi/plugins/python_plugin.so: cannot open shared object file: No such file or directory

    Django uwsgi部署方式下产生这个Bug,后来发现把uwsgi配置ini文件里面的 #plugins = python 把上面这句配置语句注释掉,uwsgi就可以运行了,当然,是正常可用运行状 ...

  9. MVC-AOP(面向切面编程)思想-Filter之IExceptionFilter-异常处理

    HandleErrorAttribute MVC中的基本异常分类: Action异常      T view异常 T, service异常     T, 控制器异常      F(异常get不到), ...

  10. maven包加载

    1) IDEA包加载pom.xml配置 <build>    <sourceDirectory>src/main/java</sourceDirectory>    ...