Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。

使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少

监听器类:

package com.tech.jin.listener;

import java.util.Timer;
import java.util.TimerTask; import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import org.apache.log4j.Logger;
import org.springframework.web.context.support.WebApplicationContextUtils; import com.tech.jin.task.OneTask;
import com.tech.jin.util.Const; /**
* 任务监听器 需要配置在web.xml的listener中
* @author Administrator
*
*/
public class TaskListener implements ServletContextListener{ private Logger logger = Logger.getLogger(TaskListener.class);
private ServletContext context = null;
private Timer timer = null; @Override
public void contextDestroyed(ServletContextEvent event) {
logger.info("TaskListener contextDestroyed...");
timer.cancel();
context = null;
} @Override
public void contextInitialized(ServletContextEvent event) {
logger.info("TaskListener contextInitialized..."); context = event.getServletContext();
//如果使用spring框架,可将context放入到一个工具类中的常量,用来取到WebApplicationContext
// Const.WEB_APP_CONTEXT = WebApplicationContextUtils.getWebApplicationContext(context); logger.info("定时器开始初始化...");
timer = new Timer(); logger.info("定时任务OneTask创建...");
TimerTask task = new OneTask(context);
long period = 60*60*1000;//每隔1小时
timer.schedule(task, 0, period);
logger.info("定时任务OneTask已添加到任务调度..."); //TODO } }

任务类:

package com.tech.jin.task;

import java.util.Calendar;
import java.util.TimerTask; import javax.servlet.ServletContext; import org.apache.log4j.Logger; public class OneTask extends TimerTask{ private Logger logger = Logger.getLogger(OneTask.class);
private ServletContext context = null;
private static final int taskExcuteTime = 15;//15点钟 public OneTask(ServletContext context){
this.context = context;
} @Override
public void run() {
logger.info("OneTask run..."); Calendar c = Calendar.getInstance();
int currentHour = c.get(Calendar.HOUR_OF_DAY);//24小时制,取值0-24 if(currentHour==taskExcuteTime){ logger.info("任务开始..."); try { doTask();//执行任务逻辑 } catch (Exception e) {
logger.error("任务执行异常:"+e);
} logger.info("任务结束..."); } } public void doTask() throws InterruptedException{
logger.info("doTask"); logger.info("context:"+context);
} }

另一种是相比于Timer的单线程,它是通过线程池的方式来执行任务的。

package com.tech.jin.listener;

import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener; import org.apache.log4j.Logger; import com.tech.jin.task.OneTask; /**
* 任务监听器 需要配置在web.xml的listener中
* @author Administrator
*
*/
public class TaskListener implements ServletContextListener{ private Logger logger = Logger.getLogger(TaskListener.class);
private ServletContext context = null;
private Timer timer = null; @Override
public void contextDestroyed(ServletContextEvent event) {
logger.info("TaskListener contextDestroyed...");
timer.cancel();
context = null;
} @Override
public void contextInitialized(ServletContextEvent event) {
logger.info("TaskListener contextInitialized..."); context = event.getServletContext();
//如果使用spring框架,可将context放入到一个工具类中的常量,用来取到WebApplicationContext
// Const.WEB_APP_CONTEXT = WebApplicationContextUtils.getWebApplicationContext(context); //1.定时任务实现方式一
/* logger.info("定时器开始初始化...");
timer = new Timer(); logger.info("定时任务OneTask创建...");
TimerTask task = new OneTask(context);
long period = 60*60*1000;//每隔1小时
timer.schedule(task, 0, period);
logger.info("定时任务OneTask已添加到任务调度...");*/ //2.定时任务实现方式二 相比于Timer的单线程,它是通过线程池的方式来执行任务的
Runnable r = new Runnable() { @Override
public void run() {
// TODO Auto-generated method stub }
};
long initialDelay = 0;//创建对象马上执行
long period = 1;//间隔一秒
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(r, initialDelay, period, TimeUnit.SECONDS); } }

java的任务监听器监听任务的更多相关文章

  1. 【转】Android开发20——单个监听器监听多个按钮点击事件

    原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...

  2. java多个listener监听

    java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...

  3. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  4. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...

  5. Java 中的事件监听机制

    看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...

  6. Java中的事件监听机制

    鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...

  7. Java实现系统目录实时监听更新。

    SDK1.7新增的nio WatchService能完美解决这个问题.美中不足是如果部署在window系统下会出现莫名其妙的文件夹占用异常导致子目录监听失效,linux下则完美运行.这个问题着实让人头 ...

  8. 请描述Java中的时间监听机制?

    1.时间监听涉及到三个组件:事件源.事件对象.事件监听器 2.当事件源上发生某个动作时,它会调用事件监听器的一个方法,并将事件对象穿进去,开发人员在监听器中通过事件对象,拿到事件源,从而对事件源进行操 ...

  9. java ServletContextListener 实现UDP监听

    使用spring boot实现项目启动时的监听, UDPListener import java.io.IOException;import java.io.UnsupportedEncodingEx ...

随机推荐

  1. storm简介[ZZ]

    场景 伴随着信息科技日新月异的发展,信息呈现出爆发式的膨胀,人们获取信息的途径也更加多样.更加便捷,同时对于信息的时效性要求也越来越高.举个搜索 场景中的例子,当一个卖家发布了一条宝贝信息时,他希望的 ...

  2. 8种CSS清除浮动的方法优缺点分析

    为什么清除CSS浮动这么难? 因为浮动会使当前标签产生向上浮的效果,同时会影响到前后标签.父级标签的位置及 width height 属性.而且同样的代码,在各种浏览器中显示效果也有可能不相同,这样让 ...

  3. Windows phone 之样式的关联

    建议大家做界面要用Blend. 做过web的都知道DIV+CSS,给页面元素关联样式有三种方式: 1.内联样式表:就是在每个元素里面写style.优点就是灵活,给指定的元素添加样式.缺点是重用性很差, ...

  4. div section article aside的理解

    div 是一个大的容器 内部可以包含header main nav aside footer等标签 没有语义,多用于为脚本添加样式 section的语义比div语义强些,用于主题性比较强的内容,比如一 ...

  5. 【C语言】中的stdbool.h头文件

    C语言中的stdbool.h头文件 一.相关基础知识 二.具体内容 Win7下安装的VS2015中的stdbool.h的位置为: F:\Program Files (x86)\Microsoft Vi ...

  6. vim设置

    折腾一下vim http://www.cnblogs.com/zhangsf/archive/2013/06/13/3134409.html

  7. <jsp:forward>、requestDispatcher和sendRedirect()的区别

    1.会话信息保存在服务器内存上,可以断续访问,和cookie相比,其保存在服务器上. 2.男人就像蓝牙:只有在你接近时,他才会找上你.当你离开后,他便又去找其他的"设备"了.女人就 ...

  8. Java中getAttribute getParameter 区别

            网上说的不少,发现都是同一篇,汗..... (1)HttpServletRequest类有setAttribute()方法,而没有setParameter()方法 (2)当两个Web组 ...

  9. python中并行遍历:zip和map-转

    http://blog.sina.com.cn/s/blog_70e50f090101lat2.html 1.并行遍历:zip和map 内置的zip函数可以让我们使用for循环来并行使用多个序列.在基 ...

  10. 【POJ1021】Intervals (最短路解差分约束)

    题目: Sample Input 5 3 7 3 8 10 3 6 8 1 1 3 1 10 11 1 Sample Output 6 题意: 我们选数,每个数只能选一次.给定n个条件[ai,bi]和 ...