java的任务监听器监听任务
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的任务监听器监听任务的更多相关文章
- 【转】Android开发20——单个监听器监听多个按钮点击事件
原文网址:http://woshixy.blog.51cto.com/5637578/1093936 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律 ...
- java多个listener监听
java 多个listener 监听方法 在class 名称上一行添加@Listeners 括号中用逗号隔开 @Listeners({com.example.MyListener.class,com. ...
- java Gui编程 事件监听机制
1. GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式: 1. 命令交互方式 图书管理系统 ...
- Java界面编程—事件监听机制
组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...
- Java 中的事件监听机制
看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...
- Java中的事件监听机制
鼠标事件监听机制的三个方面: 1.事件源对象: 事件源对象就是能够产生动作的对象.在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象.Java中根据事件的动作来区分不同的事件源对象,动 ...
- Java实现系统目录实时监听更新。
SDK1.7新增的nio WatchService能完美解决这个问题.美中不足是如果部署在window系统下会出现莫名其妙的文件夹占用异常导致子目录监听失效,linux下则完美运行.这个问题着实让人头 ...
- 请描述Java中的时间监听机制?
1.时间监听涉及到三个组件:事件源.事件对象.事件监听器 2.当事件源上发生某个动作时,它会调用事件监听器的一个方法,并将事件对象穿进去,开发人员在监听器中通过事件对象,拿到事件源,从而对事件源进行操 ...
- java ServletContextListener 实现UDP监听
使用spring boot实现项目启动时的监听, UDPListener import java.io.IOException;import java.io.UnsupportedEncodingEx ...
随机推荐
- gem install 出现Errno::ECONNRESET: Connection reset by peer - SSL_connect (https://ruby.taobao.org
这几天在ubuntu14.04.1 64位上安装rails的时候,由于大天朝的原因,更换了淘宝源,然后执行 gem install rails 这个时候,总是会提示 Errno::ECONNRESET ...
- 注册表和ODBC
注册表使用的是树型体系结构,树中的每个结点称键.每个键也可以包含其他的键或子键.它允许进一步的分支,也即为值,它用来存储有效的数据.在注册表中,注册表用键来组织数据,一个键中的值用它们的名来 ...
- Linux运维需要掌握的技能 (转)
本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具.我就大概列出这几方面,这样入门就基本没问题了 ...
- SpringMVC源码阅读(二)
今天分析下ViewResolver和View的实现 下面是ModelAndView的实现 package org.springframework.web.servlet; import java.u ...
- Struts2技术内幕----深入解析Struts2架构与设计(一)
Struts2的核心入口程序,从功能上来说必须能够处理Http请求,这是表示层框架的基本要求.为了达到这一目的,Struts2毫无例外地遵循了Servlet标准,通过实现标准的Filter接口来进行H ...
- 2015_WEB页面前端工程师_远程测题_东方蜘蛛_1
请使用HTML+CSS实现如下效果: 1. 使用CSS Sprites,实现如图1效果,素材图片为: icons.png: 2. 使用脚本语言验证邮箱.密码的必填以及邮箱的合法性: 若验证失败,则出现 ...
- LightOj_1030 Discovering Gold
题目链接 题意: 在一个1 X N 的格子上, 每个格子都有一定的黄金, 你从第一个格子出发, 问到最后一个格子得到黄金的期望. 每次前进使用骰子投点来决定前进步数, 如果投出的点前进后会超过N, 那 ...
- 【itext】7步制作兼容各种文档格式的Itext5页眉页脚 实现page x pf y
itext5页眉页脚工具类,实现page x of y 完美兼容各种格式大小文档A4/B5/B3,兼容各种文档格式自动计算页脚XY轴坐标 鉴于没人做的这么细致,自己就写了一个itext5页眉页脚工具类 ...
- Java 引用 WeakReference
Reference 是一个抽象类,而 SoftReference,WeakReference,PhantomReference 以及 FinalReference 都是继承它的具体类.接下来我们来分别 ...
- Android 用代码来实现selector
众所周知,android可以通过XML文件来创建selector,以Drawable对象的形式安装到组件上,以提供统一的风格设置.但是在某些时候,我们需要通过代码的形式来实现相同的功能,例如组件数量非 ...