- 浏览: 800817 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 2053在自己以往的学习及工作经验中,形成的概念: String ... -
Java QR code 二维码
2013-09-19 23:19 1491You can refer to http://ww ... -
java 读取大容量文件,内存溢出?
2012-09-23 11:19 7102java 读取大容量文件,内存溢出?怎么分段读取 法一:( ... -
JAVA取整
2012-02-10 09:54 1340舍掉小数取整: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 1784以下程序是一个信息编码的程序,阅读其encode部分,并补全其 ... -
ArrayList Vector LinkedList 区别与用法
2011-09-10 11:46 1003ArrayList 和Vector是 ... -
String类是否可以继承?
2011-09-10 10:56 3890问题1:String类是否可以继承? String类是 ... -
Java MD5加密
2011-09-18 22:21 3868呵呵,在网上查了看了很多,综合起来整理一个,先记下来以后用到了 ... -
java中subSequence方法和subString方法的区别
2011-08-01 09:30 8314根据JDK的文档,String.subSequence只 ... -
JAVA如何计算程序运行时间
2011-06-28 10:10 1474long t1=system.currentT ... -
java读取纯真IP数据库qqwry.dat的源代码
2011-06-27 09:31 2462java读取纯真IP数据库QQwry.dat的源代码,要运行此 ... -
SimpleDateFormat 类可以进行日期和字符串自由的转换
2011-06-18 16:46 1470JAVA中么创建"yyyy-MM-dd HH:mm: ... -
java 小方法
2011-05-19 10:55 957//***************************** ... -
Java 定时器(1)
2011-05-17 14:19 1930Java定时器(java.util.Timer ... -
Java 反斜杠 斜杠 编译 转换
2011-05-17 10:54 2807package cn.rg.demo.test; impor ... -
java字符串编码转换大全
2011-05-16 16:25 1441无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题 ... -
Java split()用法
2011-04-28 13:48 1084Java split用法 java.lang.string. ... -
ResultSet
2011-04-27 15:08 926ResultSet 对象具有指向其当前数据行的光标。最初,光标 ...
相关推荐
在这个“java2D忍者游戏demo源码”中,开发者使用了Java 2D API来构建一个简单的忍者游戏。这个游戏可能是为了教学目的设计的,适合已经掌握了基础Java编程的人员学习和研究。 在Java 2D中,你可以创建复杂的图形、...
8. **static_led_demo**:这可能是程序的主文件或源代码文件,可能包含用某种编程语言(如C++、Python、Java等)编写的核心逻辑。 通过这个DEMO,初学者可以学习到如何构建GUI,理解和使用事件驱动编程,以及如何...
Java编程语言在处理并发任务和时间调度方面提供了丰富的工具,其中`java定时器`、`多线程(池)`和`java队列`是核心概念。让我们深入探讨这些主题。 ### 1. Java定时器(java.util.Timer) `java.util.Timer` 类允许...
SSM定时器Quartz是一个广泛使用的Java定时任务框架,它允许开发者在应用程序中安排复杂的作业执行计划。在Java世界里,Quartz是一个强大的工具,它能够处理大量的并发任务,并提供了丰富的API来创建、调度和管理任务...
【定时器Demo】是一个基于Java实现的简单定时任务示例,它主要展示了如何利用Java的定时器类(java.util.Timer)或定时任务框架(如Quartz、Spring Scheduler)来执行周期性的任务。在这个demo中,开发者可能创建了...
曲线绘制通常是通过编程语言实现的,如Python中的matplotlib库,JavaScript的D3.js,或者Java的JavaFX等。这些库提供了丰富的函数和API,帮助开发者创建出各种复杂图形,包括但不限于折线图、曲线图、散点图等。在...
在"Data_&_Timer_Demo"项目中,开发者可能还涉及了定时器(Timer)的使用。在Android中,我们可以使用java.util.Timer和java.util.TimerTask类来实现定时任务。例如,我们可以设定一个定时器,在一段时间后更新...
这个"一个简单的quartz定时器的demo"是展示如何在项目中集成和使用Quartz的基本步骤,包括创建任务、配置调度器以及管理任务的生命周期。 首先,Quartz的核心组件包括Scheduler(调度器)、Job(任务)和Trigger...
在“java定时器+多线程(池)+java队列Demo”这个项目中,我们将深入探讨这三个核心概念。 1. **Java定时器(java.util.Timer)**:`Timer`类用于调度周期性的任务执行。它可以安排一个任务在未来某个时间点或定期...
《draw2d_Demo_code——探索Draw2D图形库的应用》 在计算机编程领域,图形用户界面(GUI)是与用户交互的重要方式。Draw2D是Eclipse平台下的一个开源库,专门用于创建二维图形和复杂的图形布局。本文将深入探讨Draw...
下面是一个完整的Spring定时器示例: 1. **配置Spring配置类** 首先,我们需要创建一个配置类,启用定时任务支持,并提供一个`ThreadPoolTaskScheduler`实例,用于调度任务。 ```java @Configuration @...
Java定时器和时间处理是Java开发中的重要组成部分,特别是在需要执行周期性任务或者对时间有精确控制的应用场景中。本文将深入探讨Java定时器(Timer)的使用以及如何获取和处理年月日、时间节点等时间相关的信息。 ...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...
2. **图形渲染**:在计算机图形学中,OpenGL、DirectX等图形库提供了绘制曲线的API,开发者可以利用这些库实现曲线的绘制。在"DymicCurve_demo"中,可能就是利用类似的技术来绘制和更新曲线。 3. **编程语言与框架*...
【定时执行(定时器)Demo】是一个典型的Java应用程序示例,它展示了如何使用定时任务来自动化执行特定的代码段。这个Demo通常会整合到服务器环境中,如Tomcat,以便在服务器启动时自动运行,或者根据预设的时间间隔...
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-...
2. **颜色处理**:Java提供了java.awt.Color类,用于表示和处理颜色。可以通过设置不同颜色来改变组件背景或前景,以实现多彩的视觉效果。 3. **图像加载与显示**:使用java.awt.Image类加载和显示图片,可能结合...
java串口通讯demo源码,内有注解。可实现通过javaWeb页面控制串口,调用串口数据,发送串口指令等操作。可同时监听多个串口,并同时向多个串口发送和接收消息。内含已经写好的串口监听类,定时器,以及串口数据转换...
在Android中,倒计时功能通常通过`CountDownTimer`类来实现,这是一个系统提供的定时器,可以用来执行一系列操作直到设定的时间到达。开发者可以自定义倒计时结束或每秒更新时的回调函数,这在各种应用场景中都非常...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机...