Java Web应用启动间隔执行的程序
来源:互联网 发布:网络时时彩赌博案量刑 编辑:程序博客网 时间:2024/06/15 23:32
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;
public class StartupListener implements ServletContextListener {@Overridepublic void contextDestroyed(ServletContextEvent sce) {sce.getServletContext().log("定时器销毁");
}@Overridepublic void contextInitialized(ServletContextEvent sce) {sce.getServletContext().log("启动线程池");
// Start a thread pool to deal with different task;
PoolManager.pool = Executors.newFixedThreadPool(10);sce.getServletContext().log("启动定时器");
//Create a Daemon timer thread
Timer timer=new Timer(true);// 每隔10秒钟执行任务
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;
public class MyTimerTask extends TimerTask {private ServletContext context = null;private int param;public MyTimerTask(ServletContext context) {
this.context = context;
}@Overridepublic void run() {context.log("开始执行指定定時任务");
// TODO 自定义
System.err.println("号称每10秒钟跑一次哦!我要调用线程池去执行另外的任务");
//让线程池去跑一个任务
PoolManager.pool.execute(new WorkThread(param++));
context.log("指定定時任务执行结束");
}}
PoolManager.java
package Support;
import java.util.concurrent.ExecutorService;
public class PoolManager {public static ExecutorService pool;}
WorkThread.java
package BackStage;
public class WorkThread implements Runnable {private int param;public WorkThread(int param) {this.param = param;
}@Overridepublic void run() {// 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
- Java Web应用启动间隔执行的程序
- C#计算程序执行的时间间隔
- Java Web应用启动后执行定时任务-ScheduledThreadPoolExecutor
- Tomcat web应用启动时执行代码
- web程序启动时执行一段代码
- Java虚拟机的启动与程序的执行
- WEB程序的执行过程!
- Java Web项目启动执行顺序
- java web程序启动服务器时报的错误
- spring mvc web应用启动时执行特定处理
- java web应用启动和销毁监听
- java Web 启动时自动执行代码的几种方式
- java web启动时实现执行代码的几种方式
- java Web 启动时自动执行代码的几种方式
- java Web 启动时自动执行代码的几种方式
- java Web 启动时自动执行代码的几种方式
- 使用java程序启动,停止本地应用
- 用Web页面执行的客户端程序
- 第十二章 类和动态内存分配
- Fighting_小银考呀考不过四级
- 网络爬虫技术交流——爬虫第一课
- 深度学习与中文短文本分析总结与梳理
- 《计算机网络》第7章 应用层
- Java Web应用启动间隔执行的程序
- Remove Linked List Elements
- first servlet
- Windows 10系统点击任务计划程序,提示找不到远程电脑如何处理
- git常用命令总结
- 递推递归练习P
- win10安装oracle 11g 时出现INS-13001环境不满足最低要求
- Python公开课第五节
- UVa 11496