zoukankan      html  css  js  c++  java
  • Java Web应用启动间隔执行的程序

    Reference:《Java定时器timer.schedule在Web中间隔执行任务和定时》《【Java】Timer和TimerTask详解

    做了一个Demo,完成如下的功能:

    让Tomcat在WEB程序启动的时候启动一个线程池和一个Timer线程,Timer线程每隔一段时间跑一次(比如检查到期的用户,类似轮询查看),然后触发另一个后台线程(甩给线程池去处理,比如处理到期的用户,发送等)。

    直接用代码说话

    StarupListener.java

    package Listeners;
    
    import java.util.Timer;
    
    import java.util.concurrent.Executors;
    
    import javax.servlet.ServletContextEvent;
    
    import javax.servlet.ServletContextListener;
    
    import BackStage.MyTimerTask;
    
    import Support.PoolManager;
    
    	@Override
    
    		sce.getServletContext().log("定时器销毁");
    
    	@Override
    
    		sce.getServletContext().log("启动线程池");
    
    		// Start a thread pool to deal with different task;
    
    		PoolManager.pool = Executors.newFixedThreadPool(10);
    
    		sce.getServletContext().log("启动定时器");
    
    		Timer timer=new Timer(true);
    
    		timer.schedule(new MyTimerTask(sce.getServletContext()), 0,10 * 1000); 
    
    		sce.getServletContext().log("已经添加任务调度表");
    
    }

    MyTimeTask.java

    package BackStage;
    
    import java.util.TimerTask;
    
    import javax.servlet.ServletContext;
    
    import Support.PoolManager;
    
    	private ServletContext context = null;
    
               private int  param;
    
    		this.context = context;
    
    	@Override
    
    		context.log("开始执行指定定時任务");
    
    		System.err.println("号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务");
    
    		PoolManager.pool.execute(new WorkThread(param++));
    
    		context.log("指定定時任务执行结束");
    
    }
    

    PoolManager.java

    package Support;
    
    import java.util.concurrent.ExecutorService;
    
    	public static ExecutorService pool;
    
    package BackStage;
    
    	private int param;
    
    		this.param = param;
    
    	@Override
    
    		// TODO Do something
    
    		System.err.println("我被线程池调用执行啦~!参数:" + param);
    
    }
    

    web.xml片段

    <listener>
    
    listener-class>Listeners.StartupListener</listener-class>
    
    listener>

    输出结果:(我就喜欢用System.err输出红色的!多喜庆╮(╯▽╰)╭)

    信息: 开始执行指定定時任务
    号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务
    2011-3-31 18:26:46 org.apache.catalina.core.ApplicationContext log
    信息: 指定定時任务执行结束
    我被线程池调用执行啦~!参数:1
    2011-3-31 18:26:56 org.apache.catalina.core.ApplicationContext log
    信息: 开始执行指定定時任务
    号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务
    我被线程池调用执行啦~!参数:2
    2011-3-31 18:26:56 org.apache.catalina.core.ApplicationContext log
    信息: 指定定時任务执行结束
    2011-3-31 18:27:06 org.apache.catalina.core.ApplicationContext log
    信息: 开始执行指定定時任务
    号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务
    2011-3-31 18:27:06 org.apache.catalina.core.ApplicationContext log
    信息: 指定定時任务执行结束
    我被线程池调用执行啦~!参数:3

  • 相关阅读:
    [转]Flash Builder 4安装SVN插件
    [转]ActionScript为什么不支持函数重载
    [转]Flash Builder 4 官网下载、安装与注册
    ActionScript3.0导入XML数据
    Flex与.NET互操作(六):Flex和.NET协同开发利器FluorineFx
    Flex与.NET互操作(八):使用FluorineFx网关实现远程访问
    Flex—鼠标样式设置
    Shape、Sprite 和 MovieClip 对象的 graphics 属性(graphics类)的简单用法
    IN&EXISTS与NOT IN&NOT EXISTS 的优化原则的讨论
    Windows 无法启动 SQL Server (MSSQLSERVER) 服务(位于 本地计算机 上)。错误 1067: 进程意外终止。
  • 原文地址:https://www.cnblogs.com/sand-tiny/p/3945999.html
Copyright © 2011-2022 走看看