`

Java_demo 定时器(2)

阅读更多
本例依据Java自身提供的接口实现,通过监听器(Listener)和定时器(Timer)定时执行某个任务(Task)。


myListener类:

package com.rg.listener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.fastunit.samples.listener.MyTask;


public class myListener implements ServletContextListener {

private Timer timer = null;

public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true);

//启动时间 方法1:
SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        try {
Date d1 = fTime.parse("2011/05/17 14:59:55");
// 设置任务计划,启动和间隔时间    从d1时刻开始,每隔1分钟,执行一次
timer.schedule(new MyTask(), d1, 1*10* 1000);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//启动时间 方法2:
/*
Date d2 = new Date(System.currentTimeMillis() + 1000);
// 设置任务计划,启动和间隔时间
timer.schedule(new MyTask(), d2, 3 * 1000);
*/
}

public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
}
}


myTask类:
package com.rg.listener;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.TimerTask;

import cn.rg.crawlerSpider.getHtml;


public class myTask extends TimerTask {
public void run() {
// System.out.println("call at " + (new Date()));
// TODO 此处添加具体任务代码
System.out.println("begin:");
//---begin--
try {
getHtml.getHtml("http://syc001.iteye.com/admin/blogs/1046615");
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//---end--
System.out.println("end:");

}

}



web.xml 配置:
<listener>
<listener-class>com.rg.listener.myListener</listener-class>
</listener>




schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。

  比如

  SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

  Date d1 = fTime.parse("2005/12/30 14:10:00");

  t.scheduleAtFixedRate(new TimerTask(){

  public void run()

  {

  System.out.println("this is task you do6");

  }

  },d1,3*60*1000);

  间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,如果我在14:17:00分执行这个程序,那么会立刻打印3次

  this is task you do6     //14:10

  this is task you do6     //14:13

  this is task you do6     //14:16

  并且注意,下一次执行是在14:19 而不是 14:20。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。

  但是上面如果用schedule方法,间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,那么在14:17:00分执行这个程序,则立即执行程序一次。并且下一次的执行时间是 14:20,而不是从14:10开始算的周期(14:19)。

  需要注意的是scheduleAtFixedRate和schedule在参数完全相同的情况下,执行效果是不同的。上面例子中任务只是打印一个字符串,比较简单。但如果任务比较复杂,或者由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则scheduleAtFixedRate方法将快速连续地出现两次或更多的执行,从而使后续执行能够“追赶上来”;而schedule方法的后续执行也将被延迟。所以,在长期运行中,scheduleAtFixedRate执行的频率将正好是指定周期的倒数,schedule 执行的频率一般要稍慢于指定周期的倒数。

  scheduleAtFixedRate 效率总体上高于schedule
分享到:
评论

相关推荐

    java2D忍者游戏demo源码_java_游戏_

    在这个“java2D忍者游戏demo源码”中,开发者使用了Java 2D API来构建一个简单的忍者游戏。这个游戏可能是为了教学目的设计的,适合已经掌握了基础Java编程的人员学习和研究。 在Java 2D中,你可以创建复杂的图形、...

    static_led_demo.rar_DEMO_信号灯

    8. **static_led_demo**:这可能是程序的主文件或源代码文件,可能包含用某种编程语言(如C++、Python、Java等)编写的核心逻辑。 通过这个DEMO,初学者可以学习到如何构建GUI,理解和使用事件驱动编程,以及如何...

    java定时器\多线程(池)\java队列Demo

    Java编程语言在处理并发任务和时间调度方面提供了丰富的工具,其中`java定时器`、`多线程(池)`和`java队列`是核心概念。让我们深入探讨这些主题。 ### 1. Java定时器(java.util.Timer) `java.util.Timer` 类允许...

    SSM定时器quartz DEMO

    SSM定时器Quartz是一个广泛使用的Java定时任务框架,它允许开发者在应用程序中安排复杂的作业执行计划。在Java世界里,Quartz是一个强大的工具,它能够处理大量的并发任务,并提供了丰富的API来创建、调度和管理任务...

    定时器demo

    【定时器Demo】是一个基于Java实现的简单定时任务示例,它主要展示了如何利用Java的定时器类(java.util.Timer)或定时任务框架(如Quartz、Spring Scheduler)来执行周期性的任务。在这个demo中,开发者可能创建了...

    demo.rar_DEMO_绘制各种曲线

    曲线绘制通常是通过编程语言实现的,如Python中的matplotlib库,JavaScript的D3.js,或者Java的JavaFX等。这些库提供了丰富的函数和API,帮助开发者创建出各种复杂图形,包括但不限于折线图、曲线图、散点图等。在...

    data&time_Demo

    在"Data_&_Timer_Demo"项目中,开发者可能还涉及了定时器(Timer)的使用。在Android中,我们可以使用java.util.Timer和java.util.TimerTask类来实现定时任务。例如,我们可以设定一个定时器,在一段时间后更新...

    一个简单的quartz定时器的demo

    这个"一个简单的quartz定时器的demo"是展示如何在项目中集成和使用Quartz的基本步骤,包括创建任务、配置调度器以及管理任务的生命周期。 首先,Quartz的核心组件包括Scheduler(调度器)、Job(任务)和Trigger...

    java定时器+多线程(池)+java队列Demo

    在“java定时器+多线程(池)+java队列Demo”这个项目中,我们将深入探讨这三个核心概念。 1. **Java定时器(java.util.Timer)**:`Timer`类用于调度周期性的任务执行。它可以安排一个任务在未来某个时间点或定期...

    draw2d_Demo_code

    《draw2d_Demo_code——探索Draw2D图形库的应用》 在计算机编程领域,图形用户界面(GUI)是与用户交互的重要方式。Draw2D是Eclipse平台下的一个开源库,专门用于创建二维图形和复杂的图形布局。本文将深入探讨Draw...

    spring 定时器完整实例 demo

    下面是一个完整的Spring定时器示例: 1. **配置Spring配置类** 首先,我们需要创建一个配置类,启用定时任务支持,并提供一个`ThreadPoolTaskScheduler`实例,用于调度任务。 ```java @Configuration @...

    JAVA定时器时间抓取

    Java定时器和时间处理是Java开发中的重要组成部分,特别是在需要执行周期性任务或者对时间有精确控制的应用场景中。本文将深入探讨Java定时器(Timer)的使用以及如何获取和处理年月日、时间节点等时间相关的信息。 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...

    DymicCurve_demo

    2. **图形渲染**:在计算机图形学中,OpenGL、DirectX等图形库提供了绘制曲线的API,开发者可以利用这些库实现曲线的绘制。在"DymicCurve_demo"中,可能就是利用类似的技术来绘制和更新曲线。 3. **编程语言与框架*...

    定时执行(定时器)demo

    【定时执行(定时器)Demo】是一个典型的Java应用程序示例,它展示了如何使用定时任务来自动化执行特定的代码段。这个Demo通常会整合到服务器环境中,如Tomcat,以便在服务器启动时自动运行,或者根据预设的时间间隔...

    java quartz job定时器

    demo中主要实现了两点问题。 1.job每天固定时间(如12点)扫描执行一次 2.job每隔一段时间(如5分钟)扫描执行一次 使用了quartz-all-1.6.3.jar log4j-1.2.13.jar jta-spec1_0_1.jar commons-digester-1.8.jar commons-...

    IDEA的一些JAVA小demo

    2. **颜色处理**:Java提供了java.awt.Color类,用于表示和处理颜色。可以通过设置不同颜色来改变组件背景或前景,以实现多彩的视觉效果。 3. **图像加载与显示**:使用java.awt.Image类加载和显示图片,可能结合...

    java串口通讯demo源码.zip

    java串口通讯demo源码,内有注解。可实现通过javaWeb页面控制串口,调用串口数据,发送串口指令等操作。可同时监听多个串口,并同时向多个串口发送和接收消息。内含已经写好的串口监听类,定时器,以及串口数据转换...

    Android_Demo

    在Android中,倒计时功能通常通过`CountDownTimer`类来实现,这是一个系统提供的定时器,可以用来执行一系列操作直到设定的时间到达。开发者可以自定义倒计时结束或每秒更新时的回调函数,这在各种应用场景中都非常...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...

Global site tag (gtag.js) - Google Analytics