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

举个例子,比如说我们希望一个系统每周日晚上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. Linux - 动态(Dynamic)与静态(Static)函数库

    首先我们要知道的是,函式库的类型有哪些?依据函式库被使用的类型而分为两大类,分别是静态 (Static) 与动态 (Dynamic) 函式库两类. 静态函式库的特色: 扩展名:(扩展名为 .a)   ...

  2. PS 滤镜——Skewing

    %%%% Skewing clc; clear all; close all; addpath('E:\PhotoShop Algortihm\Image Processing\PS Algorith ...

  3. 苹果新的编程语言 Swift 语言进阶(十四)--扩展

    扩展是为一个已经存在的类.结构.枚举类型添加新功能的一种方式,包括为不能存取源代码的那些已经存在的类型添加功能. 扩展类似于Objective-C语言中的类别,与类别不同的是Swift语言的扩展没有名 ...

  4. iOS监听模式系列之IOS中的几中观察监听模式

    本文介绍Objective C中实现观察者模式(也被称为广播者/监听者.发布/注册或者通知)的五种方法以及每种方法的价值所在. 该文章将包括: 1 手动广播者和监听者(Broadcaster and ...

  5. Linux内核中断和异常分析(中)

    在linux内核中,每一个能够发出中断请求的硬件设备控制器都有一条名为IRQ的输出线.所有现在存在的IRQ线都与一个名为可编程中断控制器的硬件电路的输入引脚相连,上次讲到单片机的时候,我就讲到了单片机 ...

  6. java--GUI(图形用户接口)

    转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9795435 day22 01-GUI(概述) GUI(图形用户界面) 1. GUI(Griph ...

  7. SharePoint 2010 -- Silverlight托管客户端模型简单示例

    Silverlight托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverli ...

  8. twisted高并发库transport函数处理数据包的些许问题

    还是在学校时间比较多, 能够把时间更多的花在学习上, 尽管工作对人的提升更大, 但是总是没什么时间学习, 而且工作的气氛总是很紧凑, 忙碌, 少了些许激情吧.适应就好了.延续着之前对twisted高并 ...

  9. python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结

    Beautiful Soup标准库是一个可以从HTML/XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,Beautiful Soup将会节省数小 ...

  10. Struts2数据传输的背后机制:ValueStack(值栈)

    1.     数据传输背后机制:ValueStack(值栈) 在这一切的背后,是因为有了ValueStack(值栈)! ValueStack基础:OGNL 要了解ValueStack,必须先理解OGN ...