`

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
分享到:
评论

相关推荐

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

    java定时器、多线程(池)、java队列的demodemo,下载看看看吧

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

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

    spring 定时器完整实例 demo

    java spring 定时器(精确启动时间) 完整实例 cronExpression 表达式

    定时器demo

    根据自己之前的项目和关于定时器的一些例子,自己做的一个小的定时器的demo,很简单不复杂

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

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

    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-...

    timer定时器(java)

    timer示例demo(java)

    java串口通讯demo源码.zip

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

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

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

    JAVA定时器时间抓取

    这些demo案例是笔者,之前在开发过程中用到的一些测试案例,很实用,几乎和时间相关的都有了。

    积分管理系统java源码-flutter_luakit_demo:展示如何在flutter项目中使用flutter_luakit_plugin

    积分管理系统java源码 使用flutter_luakit_plugin作为基础库开发flutter应用 文章开头我们先开门见山给出使用flutter_luakit_plugin作为基础库开发和普通flutter的区别。由于flutter定位是便携UI包,flutter提供的...

    springboot_demo:个人创建的springboot案例

    springboot-demo项目介绍首次搭建的springboot项目,数据库采用postgres,并使用pg的存储过程查询数据;使用spring-data 简化数据库的访问,前端采用angularjs,集成redis,集成支付宝app支付,微信app支付,集成...

    Java开发技术大全(500个源代码).

    narrowingConversion_2.java 缩减转换引发错误示例2 notMultipleOfThree.java 把100-200之间不能被3整除的数输出 outputByDoWhile.java 用while循环随机输出数据 outputByWhile.java 用do~while循环随机输出数据...

    JAVA定时任务-Quartz应用Demo

    0 0 12 * * ? 每天12点运行 0 15 10 ? * * 每天10:15运行 0 15 10 * * ? 每天10:15运行 0 15 10 * * ? * 每天10:15运行 0 15 10 * * ? 2008 在2008年的每天10:15运行 0 * 14 * * ? 每天14点到15点之间每分钟运行一...

    基于Spring-Boot的排队功能Demo

    Boot的排队功能Demo,通过线程同步实现简单的排队功能,运用了多线程同步技术,可通过PostMan进行接口的并发访问模拟,在调用接口时需要在Head里加入openId参数作为客户访问的唯一标识,房间状态由定时器做自动变更...

    javaWeb调用串口通讯

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

    基于Java开发的派单管理系统demo源码+项目说明+sql数据库(课程大作业).zip

    基于Java开发的派单管理系统demo源码+项目说明+sql数据库(课程大作业).zip **技术选型:** - 核心框架:Spring Boot 1.5 - 安全框架:Apache Shiro 1.3 - 视图框架:Spring MVC 4.3 - 持久层框架:MyBatis 3.3 - ...

    关于quartz的demo

    Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: 持久性作业 - 就是保持调度定时的...

    基于spring和quartz的定时任务案例

    最近要写一个java的定时任务,发现用spring和quartz部署起来最简单,并且可以方便的设置定时时间,这里是一个简单的demo,并配上了注释,简单易懂

    安卓java读取网页源码-python-demo:Python演示

    2、app.common包下面有一些公共类 BaseDao.py :对DBUtils.PersistentDB 包进行了二次封装,简化了操作mysql的步骤,使用例子参照test_mysql_001.py logger.py:日志打印,类似于java 的logback RedisDao.py: 操作...

Global site tag (gtag.js) - Google Analytics