- 浏览: 792365 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
xueweiabcok:
PowerDesigner15官方正式版+注册补丁 -
春天好:
博主写的很好,赞一个,多谢分享 *(^-^*)分享一个免费好用 ...
爬虫技术 -
零度弥合:
每天进步1%,那你一百天就成神啦。
Linux下Grails开发环境变量配置 -
dajian0822:
问下,那你显示存储CKEditor文本存储后,在用CKEdit ...
CKEditor学习笔记 -
mengfei86:
...
爬虫技术
本例依据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
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
发表评论
-
String, StringBuffer, StringBuilder 举例探究效率
2014-03-20 13:28 1991在自己以往的学习及工作经验中,形成的概念: String ... -
Java QR code 二维码
2013-09-19 23:19 1447You can refer to http://ww ... -
java 读取大容量文件,内存溢出?
2012-09-23 11:19 7021java 读取大容量文件,内存溢出?怎么分段读取 法一:( ... -
JAVA取整
2012-02-10 09:54 1295舍掉小数取整:Math.floor(2 ... -
java中利用反射机制实现调用给定为字符串的方法名
2011-09-28 15:21 0Test.java public static void ... -
JavaBean 反射实现原理
2011-09-28 14:30 0package com.DB; import java. ... -
搜狗的一个笔试题
2011-09-21 16:24 1708以下程序是一个信息编码的程序,阅读其encode部分,并补全其 ... -
ArrayList Vector LinkedList 区别与用法
2011-09-10 11:46 921ArrayList 和Vector是 ... -
String类是否可以继承?
2011-09-10 10:56 3850问题1:String类是否可以继承? String类是 ... -
Java MD5加密
2011-09-18 22:21 3813呵呵,在网上查了看了很多,综合起来整理一个,先记下来以后用到了 ... -
java中subSequence方法和subString方法的区别
2011-08-01 09:30 8272根据JDK的文档,String.subSequence只 ... -
JAVA如何计算程序运行时间
2011-06-28 10:10 1430long t1=system.currentT ... -
java读取纯真IP数据库qqwry.dat的源代码
2011-06-27 09:31 2367java读取纯真IP数据库QQwry.dat的源代码,要运行此 ... -
SimpleDateFormat 类可以进行日期和字符串自由的转换
2011-06-18 16:46 1418JAVA中么创建"yyyy-MM-dd HH:mm: ... -
java 小方法
2011-05-19 10:55 926//***************************** ... -
Java 定时器(1)
2011-05-17 14:19 1866Java定时器(java.util.Timer ... -
Java 反斜杠 斜杠 编译 转换
2011-05-17 10:54 2761package cn.rg.demo.test; impor ... -
java字符串编码转换大全
2011-05-16 16:25 1361无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题 ... -
Java split()用法
2011-04-28 13:48 1046Java split用法 java.lang.string. ... -
ResultSet
2011-04-27 15:08 893ResultSet 对象具有指向其当前数据行的光标。最初,光标 ...
相关推荐
java定时器、多线程(池)、java队列的demodemo,下载看看看吧
java定时器+多线程(池)+java队列Demo
java spring 定时器(精确启动时间) 完整实例 cronExpression 表达式
根据自己之前的项目和关于定时器的一些例子,自己做的一个小的定时器的demo,很简单不复杂
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...
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示例demo(java)
java串口通讯demo源码,内有注解。可实现通过javaWeb页面控制串口,调用串口数据,发送串口指令等操作。可同时监听多个串口,并同时向多个串口发送和接收消息。内含已经写好的串口监听类,定时器,以及串口数据转换...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...
这些demo案例是笔者,之前在开发过程中用到的一些测试案例,很实用,几乎和时间相关的都有了。
积分管理系统java源码 使用flutter_luakit_plugin作为基础库开发flutter应用 文章开头我们先开门见山给出使用flutter_luakit_plugin作为基础库开发和普通flutter的区别。由于flutter定位是便携UI包,flutter提供的...
springboot-demo项目介绍首次搭建的springboot项目,数据库采用postgres,并使用pg的存储过程查询数据;使用spring-data 简化数据库的访问,前端采用angularjs,集成redis,集成支付宝app支付,微信app支付,集成...
narrowingConversion_2.java 缩减转换引发错误示例2 notMultipleOfThree.java 把100-200之间不能被3整除的数输出 outputByDoWhile.java 用while循环随机输出数据 outputByWhile.java 用do~while循环随机输出数据...
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点之间每分钟运行一...
Boot的排队功能Demo,通过线程同步实现简单的排队功能,运用了多线程同步技术,可通过PostMan进行接口的并发访问模拟,在调用接口时需要在Head里加入openId参数作为客户访问的唯一标识,房间状态由定时器做自动变更...
java串口通讯demo源码,内有注解。可实现通过javaWeb页面控制串口,调用串口数据,发送串口指令等操作。可同时监听多个串口,并同时向多个串口发送和接收消息。内含已经写好的串口监听类,定时器,以及串口数据转换...
基于Java开发的派单管理系统demo源码+项目说明+sql数据库(课程大作业).zip **技术选型:** - 核心框架:Spring Boot 1.5 - 安全框架:Apache Shiro 1.3 - 视图框架:Spring MVC 4.3 - 持久层框架:MyBatis 3.3 - ...
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,完全由Java开发,可以用来执行定时任务,类似于java.util.Timer。但是相较于Timer, Quartz增加了很多功能: 持久性作业 - 就是保持调度定时的...
最近要写一个java的定时任务,发现用spring和quartz部署起来最简单,并且可以方便的设置定时时间,这里是一个简单的demo,并配上了注释,简单易懂
2、app.common包下面有一些公共类 BaseDao.py :对DBUtils.PersistentDB 包进行了二次封装,简化了操作mysql的步骤,使用例子参照test_mysql_001.py logger.py:日志打印,类似于java 的logback RedisDao.py: 操作...