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

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

监听器类:

  1. package com.tech.jin.listener;
  2.  
  3. import java.util.Timer;
  4. import java.util.TimerTask;
  5.  
  6. import javax.servlet.ServletContext;
  7. import javax.servlet.ServletContextEvent;
  8. import javax.servlet.ServletContextListener;
  9.  
  10. import org.apache.log4j.Logger;
  11. import org.springframework.web.context.support.WebApplicationContextUtils;
  12.  
  13. import com.tech.jin.task.OneTask;
  14. import com.tech.jin.util.Const;
  15.  
  16. /**
  17. * 任务监听器 需要配置在web.xml的listener中
  18. * @author Administrator
  19. *
  20. */
  21. public class TaskListener implements ServletContextListener{
  22.  
  23. private Logger logger = Logger.getLogger(TaskListener.class);
  24. private ServletContext context = null;
  25. private Timer timer = null;
  26.  
  27. @Override
  28. public void contextDestroyed(ServletContextEvent event) {
  29. logger.info("TaskListener contextDestroyed...");
  30. timer.cancel();
  31. context = null;
  32. }
  33.  
  34. @Override
  35. public void contextInitialized(ServletContextEvent event) {
  36. logger.info("TaskListener contextInitialized...");
  37.  
  38. context = event.getServletContext();
  39. //如果使用spring框架,可将context放入到一个工具类中的常量,用来取到WebApplicationContext
  40. // Const.WEB_APP_CONTEXT = WebApplicationContextUtils.getWebApplicationContext(context);
  41.  
  42. logger.info("定时器开始初始化...");
  43. timer = new Timer();
  44.  
  45. logger.info("定时任务OneTask创建...");
  46. TimerTask task = new OneTask(context);
  47. long period = 60*60*1000;//每隔1小时
  48. timer.schedule(task, 0, period);
  49. logger.info("定时任务OneTask已添加到任务调度...");
  50.  
  51. //TODO
  52.  
  53. }
  54.  
  55. }

任务类:

  1. package com.tech.jin.task;
  2.  
  3. import java.util.Calendar;
  4. import java.util.TimerTask;
  5.  
  6. import javax.servlet.ServletContext;
  7.  
  8. import org.apache.log4j.Logger;
  9.  
  10. public class OneTask extends TimerTask{
  11.  
  12. private Logger logger = Logger.getLogger(OneTask.class);
  13. private ServletContext context = null;
  14. private static final int taskExcuteTime = 15;//15点钟
  15.  
  16. public OneTask(ServletContext context){
  17. this.context = context;
  18. }
  19.  
  20. @Override
  21. public void run() {
  22. logger.info("OneTask run...");
  23.  
  24. Calendar c = Calendar.getInstance();
  25. int currentHour = c.get(Calendar.HOUR_OF_DAY);//24小时制,取值0-24
  26.  
  27. if(currentHour==taskExcuteTime){
  28.  
  29. logger.info("任务开始...");
  30.  
  31. try {
  32.  
  33. doTask();//执行任务逻辑
  34.  
  35. } catch (Exception e) {
  36. logger.error("任务执行异常:"+e);
  37. }
  38.  
  39. logger.info("任务结束...");
  40.  
  41. }
  42.  
  43. }
  44.  
  45. public void doTask() throws InterruptedException{
  46. logger.info("doTask");
  47.  
  48. logger.info("context:"+context);
  49. }
  50.  
  51. }

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

  1. package com.tech.jin.listener;
  2.  
  3. import java.util.Timer;
  4. import java.util.TimerTask;
  5. import java.util.concurrent.Executors;
  6. import java.util.concurrent.ScheduledExecutorService;
  7. import java.util.concurrent.TimeUnit;
  8.  
  9. import javax.servlet.ServletContext;
  10. import javax.servlet.ServletContextEvent;
  11. import javax.servlet.ServletContextListener;
  12.  
  13. import org.apache.log4j.Logger;
  14.  
  15. import com.tech.jin.task.OneTask;
  16.  
  17. /**
  18. * 任务监听器 需要配置在web.xml的listener中
  19. * @author Administrator
  20. *
  21. */
  22. public class TaskListener implements ServletContextListener{
  23.  
  24. private Logger logger = Logger.getLogger(TaskListener.class);
  25. private ServletContext context = null;
  26. private Timer timer = null;
  27.  
  28. @Override
  29. public void contextDestroyed(ServletContextEvent event) {
  30. logger.info("TaskListener contextDestroyed...");
  31. timer.cancel();
  32. context = null;
  33. }
  34.  
  35. @Override
  36. public void contextInitialized(ServletContextEvent event) {
  37. logger.info("TaskListener contextInitialized...");
  38.  
  39. context = event.getServletContext();
  40. //如果使用spring框架,可将context放入到一个工具类中的常量,用来取到WebApplicationContext
  41. // Const.WEB_APP_CONTEXT = WebApplicationContextUtils.getWebApplicationContext(context);
  42.  
  43. //1.定时任务实现方式一
  44. /* logger.info("定时器开始初始化...");
  45. timer = new Timer();
  46.  
  47. logger.info("定时任务OneTask创建...");
  48. TimerTask task = new OneTask(context);
  49. long period = 60*60*1000;//每隔1小时
  50. timer.schedule(task, 0, period);
  51. logger.info("定时任务OneTask已添加到任务调度...");*/
  52.  
  53. //2.定时任务实现方式二 相比于Timer的单线程,它是通过线程池的方式来执行任务的
  54. Runnable r = new Runnable() {
  55.  
  56. @Override
  57. public void run() {
  58. // TODO Auto-generated method stub
  59.  
  60. }
  61. };
  62. long initialDelay = 0;//创建对象马上执行
  63. long period = 1;//间隔一秒
  64. ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
  65. service.scheduleAtFixedRate(r, initialDelay, period, TimeUnit.SECONDS);
  66.  
  67. }
  68.  
  69. }

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. 彻底删除sql2008r2

    一.    SQL2008卸载. 1.从控制面板卸载 1)点击计算机右下角“开始”,点击“控制面板” 2)点击“卸载程序”. 3)在程序列表中找到“Microsoft SQL Server 2008” ...

  2. Jquery效果之固定不动的块

    好多页面都有用到这种效果,大概就是不论页面上下如何滚动,固定不动的元素不随页面滚动,代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 ...

  3. js 中对象属性特性的描述

    如何自定义属性的特性? 用对象.属性的特性和自定义的属性的特性有什么区别? 它的四大特性 writable   enumerable   configable   有什么区别? 先预习一个用对象.属性 ...

  4. javascript 获取 class 样式 重新赋值class样式 为div等系列标签内更改内容

    name = document.getElementById(project_not_through_id).className;                     // 获取目标id的 cla ...

  5. pragma指令简介

    整理日:2015年3月12日 资源来来自己网络 在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作. 下面介绍了一下该指令的一些常用参数,希望对大家 ...

  6. 共享式以太网与交换式以太网的性能比较(OPNET网络仿真实验)

      一.实验目的 比较共享式以太网和交换式以太网在不同网络规模下的性能. 二.实验方法 使用opnet来创建和模拟网络拓扑,并运行分析其性能. 三.实验内容 3.1   实验设置(网络拓扑.参数设置. ...

  7. Rails中的测试RSpec升级遇到的问题

    bundle exec rspec spec/ /home/wuxj/Prac/rrprac/sample_app/spec/spec_helper.rb::in `block in <top ...

  8. BuzzSumo:什么样的文章能获得疯转?(基于1亿篇文章大数据分析)

    BuzzSumo:什么样的文章能获得疯转?(基于1亿篇文章大数据分析) 社交媒体追踪服务分析工具BuzzSumo,2014年5月前后对社交媒体上超过1亿篇文章进行了分析,试图找出一个答案: 什么样的内 ...

  9. 应用安全技术趋势之 Top 5

    而今,大多数应用都依赖于像入侵防护系统(Instrusion Prevention System)和 Web 应用防火墙(Web Application Firewall,以下全文简称 WAF)这样的 ...

  10. mysql中TimeStamp和Date的转换

    mysql 查询时间戳(TIMESTAMP)转成常用可读时间格式 from_unixtime()是MySQL里的时间函数 date为需要处理的参数(该参数是Unix 时间戳),可以是字段名,也可以直接 ...