一个Java Web后台任务执行工具的设计与实现
提到后台任务,最容易想到的恐怕就是Java 中的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("开关已经关闭,无须设置!");
                }
        }
}

package task;

/**
* 任务的执行工具
*
* @author leizhimin 2008-12-25 10:39:18
*/
public class Test {
        static int i = 0;

public synchronized static void exe() throws InterruptedException {
                System.out.println(++i);
                MyTask myTask = new MyTask();
                myTask.start();
                Thread.sleep(100);
        }

public static void main(String[] args) throws InterruptedException {
                exe();
        }
}

index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Simple jsp page</title></head>
<body>Place your content here

<a href="on.jsp">启动</a>         
<a href="off.jsp">关闭</a>
</body>
</html>

on.jsp
<%@ page import="task.MyTask" %>
<%@ page import="task.Test" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Simple jsp page</title></head>
<body>
<%
        MyTask.setOn();
        Test.exe();

%>
<a href="on.jsp">启动</a>         
<a href="off.jsp">关闭</a>
</body>
</html>

off.jsp
<%@ page import="task.MyTask" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Simple jsp page</title></head>
<body>
<%
        MyTask.setOff();
%>

<a href="on.jsp">启动</a>         
<a href="off.jsp">关闭</a>

</body>
</html>

开关状态被置为开!,任务开始执行!
1
do------------
do------------
do------------
do------------
do------------
开关关闭,正在执行的任务结束后将终止!
do------------
从执行结果上看,基本满足了以上的需求,下来要做的就是装饰了,添加线程池的管理,指定多个任务,完善执行器的控制等等。

一个Java Web后台任务执行工具的设计与实现相关推荐

  1. jroo,已开源,一个java web快速开发工具

    2019独角兽企业重金招聘Python工程师标准>>> 代码在:http://code.google.com/p/jroo/. 演示地址:http://jeecms1.x8.fjjs ...

  2. 基于Java的QQ屏幕截图工具的设计与实现(论文+PPT+源码)

    幻灯片1 基于Java的QQ屏幕截图工具的设计与实现 幻灯片2 论文绪论 设计方法 设计结果 论文总结 CONTENTS 致 谢 幻灯片3 论文绪论 幻灯片4 课题背景 当今时代是飞速发展的信息时代, ...

  3. Java Web的分页工具类

    最近写一个java web项目,以前分页的工具类,都是基础架构的人写好了的.也没有去细看,现在遇到这个状况. 就整理一下思路,自己写了一个分页的工具类.写的不好之处,还望斧正. 下面是我的代码: Pa ...

  4. 毕业设计之 --- 基于java web的物流信息网的设计与实现

    文章目录 0 前言 1 课题背景 2 实现功能 2.1 系统流程设计 2.2 系统功能设计 2.3 数据流 2.4 数据库ER图 3 运行效果 4 部分实现代码 5 最后 0 前言 今天向大家展示学长 ...

  5. java邮件登录系统设计_基于Java web的邮件管理系统的设计与实现(含源文件).doc

    毕业设计诚信声明书 毕 业 设 计 中文题目 基于Java web的邮件管理系统的设计与实现 英文题目 Based on Java web email management system design ...

  6. 我的第一个java web表白情书

    第一次表白总是忐忑而且不安,所写出来的情书也是很挫的,作为刚刚学习java  web的渣渣,有没有想过发给他或她一个网址,然后打开后,就是一封情书?今天我们来上实践课的第一堂课,有些时候技术不仅是技术 ...

  7. cansina 目录_一个高级web目录扫描工具,功能将会强于DirBuster、Dirsearch、cansina、御剑。...

    Dirmap 一个高级web目录扫描工具,功能将会强于DirBuster.Dirsearch.cansina.御剑 需求分析 经过大量调研,总结一个优秀的web目录扫描工具至少具备以下功能: 并发引擎 ...

  8. java图片缩放工具类,一个JAVA图形缩放处置工具类

    一个JAVA图形缩放处理工具类 调用的例子 import java.io.FileOutputStream; import java.io.IOException; import javax.imag ...

  9. Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...

最新文章

  1. 计算机组成 面试 ---杂货铺
  2. Py之imgaug:Python库之imgaug简介、安装、使用方法之详细攻略
  3. jQuery应用之(二)使用jQuery管理选择结果(荐)
  4. python函数使用易错举例
  5. 【会话推荐】ICDM论文:探索跨会话信息感知的推荐模型
  6. GitHub 日收 7000 星,Windows 计算器项目开源即爆红!
  7. 数据挖掘十大经典算法之——SVM 算法
  8. windows 系统删除服务命令 sc delete 服务名称
  9. Sematic UI框架的学习-button样式(1)
  10. 宁录哨兵机器人_当天启碰上哨兵机器人孰强孰弱?这部漫画给出了答案!
  11. 区块链是什么意思 如何简单明了的理解区块链
  12. MFC combo, radio控件使用
  13. 牛腩新闻系统--.NET使用一般处理程序生成验证码
  14. 此图形驱动程序无法找到兼容的图形…
  15. CC2541 BLE源码阅读知识积累之OSAL小结
  16. 【应用】Markdown 在线阅读器
  17. 如何鼠标悬浮显示隐藏图片
  18. 目标检测YOLO实战应用案例100讲-基于深度学习的自动驾驶车辆三维目标检测方法研究与应用
  19. F - Nastya and Door
  20. android app根目录下cache,Android 手机存储目录详解

热门文章

  1. 一些真诚的学习经验和生活感悟
  2. ACL 2022录用结果出炉:国内多支团队晒“战绩”,清华一实验组18篇入选
  3. 黑客帝国真的可以!这100万个「活体人脑细胞」5分钟学会打游戏
  4. 大写的服!中科大博士20万字论文:如何给女朋友送礼物
  5. 计算机视觉工程师一天都大致在做些什么?
  6. 在深度学习的路上,哪些框架或学习平台值得推荐?
  7. 细数二十世纪最伟大的10大算法
  8. 美多商城后台管理之登录、浏览器的同源策略
  9. 线性回归之数学:求导公式
  10. ping不通是不是就真不通?