java间隔执行_Java Web应用启动间隔执行的程序

做了一个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 threadTimer 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 somethingSystem.err.println("我被线程池调用执行啦~!参数:" + param);}}

web.xml片段

Listeners.StartupListener

输出结果:(我就喜欢用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值