`
wwwang123456
  • 浏览: 7251 次
社区版块
存档分类
最新评论

java定时器(可以实现即时开关)

    博客分类:
  • java
阅读更多
   最近在架构系统的时候,其中用到一些交易是对交易的开关的控制,因为交易量较大,考虑不能是一直读取数据库,所以决定使用定时器把数据库的信息读到内存然后调用。
   但是为了可以在更改数据库里的信息后能即时的让定时器更新,暂时想到的是通过url接受到的参数。
   import java.util.TimerTask;

/**
* 定时任务类
* @author Jack.
* @Time: 2011-10-12 11:31:21.
* @FileName: MyTimerTask.java.
* @Version 1.0
*/
public class MyTimerTask extends TimerTask {

    /**
     * 判断任务是否在执行
     */
    private static boolean isRunning = false;

    /**
     * 计数
     */
    private static long count = 1;

    /**
     * 任务执行
     */
    public void run() {
       //TODO: 以下可添加相应的定时任务
       if (!isRunning) {
           isRunning = true;
           System.out.println("定时任务执行到了第" + count + "次");
           count++;
           //TODO: Add any other things you want to do here.
           isRunning = false;
       } else {
           System.out.println("定时任务已在执行中了...");
       }
    }
}
/**
*
*/
package TimerTest;
import java.util.Timer;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;



/**
* 定时任务Servlet类
* @author Jack.
* @Time: 2011-10-12 11:36:01.
* @FileName: MyTimer.java.
* @Version 1.0
*/
public class MyTimerServlet extends HttpServlet implements ServletContextListener {
    /**
     *
     */
    private static final long serialVersionUID = 5743600041518326783L;

    /**
     * 定时任务
     */
    private static MyTimerTask task = new MyTimerTask();;

    /**
     * 定时器
     */
    private static Timer timer = null;

    /**
     * Web服务器启动后执行
     */
    public void contextInitialized(ServletContextEvent event) {
       System.out.println("定时任务已启动");
       timer = new Timer();
       timer.schedule(task, 1000, 10 * 1000); //1000-表示启动后隔1秒才执行,10*1000表示每次执行的间隔为10秒.
    }

    /**
     * Web服务器关闭后执行
     */
    public void contextDestroyed(ServletContextEvent event) {
       timer.cancel();
       System.out.println("定时任务已取消");
    }


    /**
     *
     * @param request
     * @param response
     * @param event
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
       processRequest(request, response);
    }


    /**
     *
     * @param request
     * @param response
     * @param event
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
       processRequest(request, response);

    }



    /**
     * 通过HTTP-Servlet控制定时器的开关.
     * @param request
     * @param response
     * @param event
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) {
       response.setContentType("text/html;charset=UTF-8");
       String action = request.getParameter("action");
       if ("shutdown".equals(action)) {
           timer.cancel();
           this.getServletContext().log("定时任务已取消");
       } else if ("start".equals(action)) {
           timer.cancel();
           timer = new Timer();
           this.getServletContext().log("定时任务已启动");
           timer.schedule(task, 1000, 10 * 1000);
       }
    }

  
}

在Web.xml中加入
<listener>
        <listener-class>com.jack.timer.MyTimerServlet</listener-class>
</listener>

<servlet>
        <servlet-name>MyTimer</servlet-name>
        <servlet-class>com.jack.timer.MyTimerServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyTimer</servlet-name>
        <url-pattern>/myTimer</url-pattern>
    </servlet-mapping>
就可以在web服务器启动时执行定时任务,并可通过web去控制定时,例如:http://localhost:8080/myTimer?action=shutdown
分享到:
评论

相关推荐

    时间轮定时器java实现

    Java实现时间轮定时器时,可以使用数组或链表来模拟环形结构,每个槽位代表一个时间间隔,任务则存储在相应的槽位中。时间轮的优点在于空间效率高,对于大量短期和重复的定时任务,它的性能优于最小堆。 实现基于...

    JAVA定时器JAVA定时器.pdf

    在 Spring 框架中,JAVA定时器可以与Quartz框架集成,实现自动执行任务的功能。 1. JAVA定时器的基本概念 JAVA定时器是基于Quartz框架的任务调度器,用于在指定的时间执行特定的任务。这类任务可以是任何类型的...

    java定时器的实现

    ### Java定时器的实现 #### 一、概述 在Java编程中,定时执行特定任务是一种常见的需求。...通过以上分析可以看出,Java定时器的实现相对简单且易于理解,但在实际项目中还需要根据具体情况灵活选择合适的技术方案。

    Java定时器的使用 Java程序

    在Java程序设计中,定时器常常用于实现周期性的任务,比如定时备份数据、定时检查系统状态或者定时发送通知等。本篇文章将深入探讨Java定时器的使用方法和关键概念。 ### 1. Java定时器类介绍 Java定时器类`Timer`...

    Java定时器

    总结来说,Java定时器是Java编程中的一个重要概念,它结合`Timer`和`TimerTask`类可以实现各种定时任务,而在`Swing`环境中,`Swing Timer`提供了更加便捷且线程安全的解决方案。对于Java初学者来说,理解和掌握...

    java 定时器(Timer)

    通过使用Java的Timer类,你可以轻松地在Java应用程序中实现复杂的定时任务调度,无论是简单的延时执行还是周期性的任务循环。结合ActionListener,你可以灵活地控制定时器触发的事件,从而满足各种需求。在实际项目...

    java定时器

    java定时器,import java.util.Calendar; import java.util.Date; import java.util.Timer; import java.util.TimerTask; 规定每天几点执行一次

    java 定时器 spring 定时器

    Java定时器和Spring定时器是Java开发中用于执行周期性任务的重要工具,它们在系统维护、数据同步、报告生成等场景中发挥着关键作用。本文将深入探讨这两个概念,以及如何在Spring框架中配置和使用定时器。 首先,...

    Java定时器框架(Quartz)

    Java定时器框架Quartz是Java开发中用于任务调度的一个强大工具,它允许开发者精确地控制任务的执行时间,包括一次性任务和周期性任务。Quartz以其灵活性和稳定性,在企业级应用中广泛使用,尤其在需要定期执行后台...

    Java定时器简例

    ### Java定时器实现详解 在Java编程中,定时任务是常见的需求之一,无论是服务器的定期维护、数据同步,还是客户端的动画更新等场景,都需要用到定时器来精确控制任务的执行时间。本文将深入解析一个基于Java的简单...

    java定时器服务!!

    总结来说,Java定时器服务主要通过`Timer`和`TimerTask`实现,用于计划未来的任务执行。当需求更复杂时,可以转向`ScheduledExecutorService`。在实际编程中,理解这些类的工作原理和使用方式,能帮助我们更好地管理...

    JAVA定时器JAVA定时器

    JAVA定时器,只要服务开启,就能指定某些代码在某个时刻执行,例如:监狱里罪犯的余刑天数,每天都要减少,就可以设置一个定时器在每天的23:59:59来执行减少余刑天数的天。

    java定时器的使用

    在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等。 对于这样的操作最方便、高效的实现方式就是使用java.util.Timer工具类。

    java web定时器例子

    总结,Java Web定时器提供了多种实现方式,可以根据实际需求选择合适的工具。`java.util.Timer` 简单易用,适用于轻量级定时任务;Spring的`@Scheduled` 提供了更多灵活性,适合Spring环境下的应用;而Quartz则更...

    JAVA中定时器的使用

    JAVA 中提供了多种方式来实现定时器,包括使用 Timer 和 TimerTask 类,使用 ScheduledExecutorService 等。 在 JAVA 中,Timer 和 TimerTask 是两个基本的类,用于实现定时器。Timer 类用于创建一个新的定时器,而...

    java定时器例子

    java定时器例子,使用 java.util.TimerTask 类来实现定时执行

    java定时器结合spring

    Java定时器结合Spring框架可以创建灵活且可扩展的定时任务,这种技术在许多企业级应用中非常常见,用于执行周期性的后台任务,如数据清理、报告生成或服务调用等。下面将详细介绍如何在Spring中集成Java定时器,并...

    java定时器.rar

    Java定时器(Timer)是Java语言中用于调度任务的一个重要工具,它可以帮助我们在特定时间执行一次或重复执行某个任务。这个“java定时器.rar”压缩包可能包含了关于如何使用Java定时器的相关示例代码和教程。 Java...

    Java后台定时器代码

    在Java中,我们可以使用多种方式实现后台定时任务,包括使用`java.util.Timer`类,`java.util.concurrent.ScheduledExecutorService`,以及Spring框架中的`@Scheduled`注解。下面我们将详细探讨这些方法。 1. **...

Global site tag (gtag.js) - Google Analytics