Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 383|回复: 0

[jsp学习]Web后台任务定时执行工具的设计及实现

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-16 00:05:25 | 显示全部楼层 |阅读模式
    一.说道后台定时执行任务,肯定会想到Timer和开源定时器Quartz,他们都是后天定时控制的,现在我们的需求是做一个可控性很强的控制工具,前台有两个按钮 可以控制任务的开始和停止,废话少说,来开始我们的任务吧, 首先需要一个线程,这个线程来控制任务的执行,我们要做到线程完全被控制就得设置一个标识静态变量flag,这个线程里面还包括了开始和停止方法:  
       
        package com.aisino.jwd;
    /**
    * @author jwdstef
    */
    public class MyTask extends Thread{
            private static boolean sw = false;
            public void run(){
             while(sw){
           //执行所有业务
           for(int i = 0 ; i <100;i++){
             System.out.println("do............."+i);
           }
             }
        }
           
       /**
       * 开始任务
       * author:jwdstef
       * 2010-5-5
       */
       public static void setOn(){
            if(sw == false){
          System.out.println("打开任务.........");
           sw = true;
            }else{
          System.out.println("任务已经开始,无法再次打开......");
            }
      }
      
            /**
             * 结束任务
             * author:jwdstef
             * 2010-5-5
             */
            public static void setOff(){
             if(sw == true){
          System.out.println("关闭任务..........");
                    sw = false;
             }else{
          System.out.println("任务已经关闭,无法再次关闭.......");
             }
      }
    }
                               
        任务执行类
        package com.aisino.jwd;
    public class Test {
            static int i = 0;
            /**
             * author:jwdstef
             * 2010-5-5
             * @param args
             */
            public static void main(String[] args) throws InterruptedException  {
                    // TODO Auto-generated method stub
                    exe();
            }
           
            public synchronized static void exe() throws InterruptedException{
                    System.out.println(++i);
                    MyTask mytask = new MyTask();
                    mytask.start();
                    Thread.sleep(1000);
            }
    }
                               
        控制页面index.jsp
       
         <%@ page contentType="text/HTML;charset=UTF-8" language="java" %>
    <html>
    <head><title></title></head>
    <body>任务控制
    <a href="on.jsp" mce_href="on.jsp">启动</a>         
    <a href="off.jsp" mce_href="off.jsp">关闭</a>
    </body>
    </html>  
        启动页面 on.jsp
        <%@ page import="com.aisino.jwd.MyTask" %>
    <%@ page import="com.aisino.jwd.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" mce_href="on.jsp">启动</a>         
    <a href="off.jsp" mce_href="off.jsp">关闭</a>
    </body>
    </html>  
        关闭页面 off.jsp
        <%@ page import="com.aisino.jwd.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" mce_href="on.jsp">启动</a>         
    <a href="off.jsp" mce_href="off.jsp">关闭</a>
    </body>
    </html>  
         写完这个,顺便再来看看Timer吧
        java.util.Timer定时器,实际上是个线程,定时调度所拥有的TimerTasks。
    一个TimerTask实际上就是一个拥有run方法的类,需要定时执行的代码放到run方法体内,TimerTask一般是以匿名类的方式创建。
    看看Timer的所有方法
         void cancel()
              终止此计时器,丢弃所有当前已安排的任务。
    int purge()
              从此计时器的任务队列中移除所有已取消的任务。
    void schedule(TimerTask task, Date time)
              安排在指定的时间执行指定的任务。
    void schedule(TimerTask task, Date firstTime, long period)
              安排指定的任务在指定的时间开始进行重复的固定延迟执行。
    void schedule(TimerTask task, long delay)
              安排在指定延迟后执行指定的任务。
    void schedule(TimerTask task, long delay, long period)
              安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。
    void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
              安排指定的任务在指定的时间开始进行重复的固定速率执行。
    void scheduleAtFixedRate(TimerTask task, long delay, long period)
              安排指定的任务在指定的延迟后开始进行重复的固定速率执行。
                               
         java.util.Timer timer = new java.util.Timer(true);
    // true 说明这个timer以daemon方式运行(优先级低,
    // 程序结束timer也自动结束),注意,javax.swing
    // 包中也有一个Timer类,如果import中用到swing包,
    // 要注意名字的冲突。
    TimerTask task = new TimerTask() {
    public void run() {
    ... //每次需要执行的代码放到这里面。
    }
    };
    //以下是几种调度task的方法:
    timer.schedule(task, time);
    // time为Date类型:在指定时间执行一次。
    timer.schedule(task, firstTime, period);
    // firstTime为Date类型,period为long
    // 从firstTime时刻开始,每隔period毫秒执行一次。
    timer.schedule(task, delay)
    // delay 为long类型:从现在起过delay毫秒执行一次
    timer.schedule(task, delay, period)
    // delay为long,period为long:从现在起过delay毫秒以后,每隔period
    // 毫秒执行一次。
                              
        定时任务:
         import java.util.Timer;
    public class TimerTaskTest extends java.util.TimerTask{
    @Override
    public void run() {
       // TODO Auto-generated method stub
       System.out.println("start");
    }
    }
                              
        测试调用
         import java.util.Timer;
    public class Test {
    public static void main(String[] args){
       Timer timer = new Timer();
       timer.schedule(new TimerTaskTest(), 1000, 2000);
    }
    }
                              
        经过以上两个例子,可以结合两者,在前台输入时间 然后控制开启和关闭 这样任务的时间可以改变,
    同时可控性也得到了很大提高,如果我们不想执行这个任务 我们可以手动去停止它

       
    复制代码

         
          
          
            
            

             
            

             
            
          
         
       

       
      


    源码下载:http://file.javaxxz.com/2014/10/16/000525390.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-19 03:35 , Processed in 0.373539 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表