Board logo

标题: 一个Java Web后台任务执行工具的设计与实现 [打印本页]

作者: qingqing3721    时间: 2011-12-6 06:24     标题: 一个Java Web后台任务执行工具的设计与实现

提到后台任务,最容易想到的恐怕就是中的Timer或者大名鼎鼎的开源定时器Quartz,但是,从实质讲,他们都是定时器,以时间距离严格的进行间歇性的执行。
假设要做一个可控制性很强的后台任务执行工具,Timer和Quartz都不适宜。
先看看要求:任务不随着Web效劳器的启动而启动,任务的启动、封闭、重启都通过Web页面来控制,任务是后台的一个线程,一个任务只能用一个线程去执行(单线程队列式的执行方式),在任务封闭的时分,要等着任务执行完成再封闭,保证任务的执行的完好性。
基于以上的要求:没有现成的组建或开源的大饼,只能自己手写了。
分三步:剖析、设计、完成。
一、剖析
任务是一个线程。—— boolean sw
任务需要开关。——Runnable的静态变量。
任务在反复执行。—— while(sw){ do……}
任务需要通过一定的方式启动封闭。Test#exe
二、设计
定义一个任务类MyTask,加入开关,并增加设置开关状态的办法,在run办法中循环执行业务。循环条件以开关为准。
定义一个启动任务的工具,比如Test吧,并第一个static办法exe去执行任务,要单线程访问,设置为synchronized的。
做三个复杂的页面,index.jsp/on.jsp/off.jsp来控制任务。(页面凑合着搞得,不想浪费太多时间,能阐明问题即可)。
三、完成




package task; /** * 任务 * * @author leizhimin 2008-12-25 10:37:22 */ public class MyTask extends Thread { private static boolean sw = false; public void run() { while (sw) { //进行的一切业务 for (int i = 0; i  9999999; i++) ; System.out.println("do------------"); } } public static void setOn() { if (sw == false) { System.希夏邦马out.println("开关状态被置为开!,任务末尾执行!"); sw = true; } else { System.out.println("开关已经翻开,无须设置!"); } } public static void setOff() { if (sw == true) { System.out.println("开关封闭,正在执行的任务完毕后将终止!"); sw = false; } else { System.out.println("开关已经封闭,无须设置!"); } } }




欢迎光临 编程开发论坛 (http://bbs.lihuasoft.net/) Powered by Discuz! 6.0.0