`

Timer、TimerTask实现定时业务处理

阅读更多
1、编写任务
package com.boonya.timer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimerTask;
/**
 * myTask.java
 * 功能:编写定时执行的任务
 * @author boonya
 * @version 1.0 2012-10-11
 */
public class myTask extends TimerTask{

	@Override
	public void run() {
		// TODO Auto-generated method stub
		Date mydate=new Date();
		String runTime=new SimpleDateFormat("yyy-MM-dd hh:mm:ss").format(mydate);
		System.out.println(runTime+"定时任务正在执行.........");
	}
}

2、设置调用简单任务
package com.boonya.timer;
import java.util.Timer;
/**
 * RunMyTask.java
 * 功能:调用定时执行的任务
 * @author boonya
 * @version 1.0 2012-10-11
 */
public class RunMyTask {
	
	public static void execute(){
		Timer timer = new Timer();
		//一天执行一次
		/*Date   start=new   Date();
	       start.setDate(start.getDate()+1);
	       start.setHours(2);
	       start.setMinutes(0);
	       start.setSeconds(0);
	       long l = start.getTime()-System.currentTimeMillis();
	       timer.schedule(new myTask(), l, 24*1000*60*60);*/
		 //1分钟执行一次的任务
		timer.schedule(new myTask(), 60000, 60*1000);//task,delay,peroid
	}
}

3、编写复杂任务调度策略的范围接口
public interface SchedulerService {
    void schedule(TimerTask task, long delay);
    void schedule(TimerTask task, long delay, long period);
    void schedule(TimerTask task, Date firstTime, long period);
    void scheduleAtFixedRate(TimerTask task, long delay, long period);
    void scheduleAtFixedRate(TimerTask task, Date firstTime, long period);
} 

4、实现任务策略接口

public class SchedulerServiceImpl implements SchedulerService {
    //延迟多长时间调用一次就陷入线程等待
    @Override
    public void schedule(TimerTask task, long delay) {
        new Timer().schedule(task, delay);
    }
   //延迟delay微秒调用一次,以后每隔period微秒执行一次
    @Override
    public void schedule(TimerTask task, long delay, long period) {
        new Timer().schedule(task, delay, period);
    }
   //从firstTime开始执行,每隔period微秒执行一次
    @Override
    public void schedule(TimerTask task, Date firstTime, long period) {
        new Timer().scheduleAtFixedRate(task, firstTime, period);
    }
   //延迟delay微秒调用一次,以后每隔period微秒执行一次:方法重在执行频率
    @Override
    public void scheduleAtFixedRate(TimerTask task, long delay, long period) {
        new Timer().scheduleAtFixedRate(task, delay, period);
    }
   //从firstTime开始执行,每隔period微秒执行一次:方法重在执行频率
    @Override
    public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period) {
        new Timer().scheduleAtFixedRate(task, firstTime, period);
    }
} 
//注:建议只使用schedule方法。 

5、调度业务调用
public static void main(String[] args) {
        SchedulerService service=new SchedulerServiceImpl();
        // execute one time then the thread turn to wait status
        service.schedule(new TemplateTask(), 5*1000);
        // start from now every 5 seconds execute my task
//        service.schedule(new TemplateTask(), new Date(), 5*1000); 
        //delay 5 seconds then as 5 seconds time-step to execute my task
//        service.schedule(new TemplateTask(), 5*1000, 5*1000);
//        service.scheduleAtFixedRate(new TemplateTask(), new Date(), 5*1000);
//        service.scheduleAtFixedRate(new TemplateTask(), 5*1000, 5*1000);
} 

6、web配置项目启动执行任务
---可以设置一个Servlet在项目启动时启动定时任务,web.xml配置如下:
  
 <servlet>
      <description>This is the description of my J2EE component</description>
      <display-name>This is the display name of my J2EE component</display-name>
      <servlet-name>ReadUserListHandler</servlet-name>
      <servlet-class>com.boonya.test.servlet.ReadUserListHandler</servlet-class>
      <load-on-startup>5</load-on-startup>  
    </servlet>
    
     <servlet-mapping>
       <servlet-name>ReadUserListHandler</servlet-name>
       <url-pattern>/servlet/ReadUserListHandler</url-pattern>
    </servlet-mapping>
  注: <load-on-startup>说明,
  在servlet的配置当中,<load-on-startup>5</load-on-startup>的含义是:
  标记容器是否在启动的时候就加载这个servlet。
  当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
  当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
  正数的值越小,启动该servlet的优先级越高。
7、注意事项
      每一个Timer仅对应唯一一个线程。
  Timer不保证任务执行的十分精确。
  Timer存在线程安全隐患。
分享到:
评论

相关推荐

    timerTask实现每天定时一段时间内执行定时任务

    总结起来,通过 `TimerTask` 和 `Timer` 类,我们可以轻松地在 Java 应用程序中实现周期性的定时任务。结合 `Calendar` 类,我们可以精确地控制任务的执行时间,确保它每天都在特定时间段内运行。在实际项目中,根据...

    TimerTask执行每日定时任务

    在Java编程语言中,`TimerTask`和`Timer`是两个关键类,它们用于实现定时任务的调度。这两个类属于`java.util`包,为开发者提供了执行周期性或一次性任务的能力。下面我们将深入探讨如何利用`TimerTask`执行每日定时...

    Timer与TimerTask(计时器)

    `Timer`和`TimerTask`是Java中非常实用的类,它们为开发者提供了简单易用的方式来实现定时任务。然而,需要注意的是,在多线程环境中使用`Timer`时要特别小心,因为默认情况下`Timer`是单线程的,这可能会导致任务...

    Spring的quartz和Timer实现定时

    在Java世界中,任务调度是十分重要的,Spring框架提供了多种定时任务实现方式,其中包括Quartz和Timer。Quartz是一款开源的作业调度框架,而Timer是Java标准库中的一个类,用于执行定时任务。这两个工具都能帮助...

    几种定时任务(Timer、TimerTask、ScheduledFuture)的退出—结合真实案例【JAVA并发】.docx

    本文将结合实际案例探讨如何使用Timer、TimerTask以及ScheduledFuture来实现定时任务,并着重讲解它们的退出机制。 首先,我们来看Timer和TimerTask的使用。Timer类是一个用于调度定时任务的工具,它使用单个后台...

    Spring整合TimerTask实现定时任务调度

    2. 创建定时调度业务类,例如`TaskService`,它继承自`TimerTask`,并实现`run()`方法: ```java public class TaskService extends TimerTask { private int count = 1; public void run() { System.out....

    quartz 和 Timer实现定时功能

    `Quartz`和`Timer`都是Java中实现定时任务的工具,各有特点和适用场景。 `Timer`是Java标准库中的类,位于`java.util`包下,提供了定时任务的基本功能。`Timer`创建一个后台线程,可以安排单次或周期性的任务执行。...

    java定时任务的实现方式

    Java定时任务的实现是软件开发中常见的需求,用于在特定时间执行特定的业务逻辑,例如数据备份、报表生成等。本文将详细介绍两种常用的Java定时任务实现方式:Timer类和Spring框架的Quartz调度器。 首先,第一种...

    Timer定时器代码.zip

    通过这种方式,`Timer`和`TimerTask`可以在不干扰主要业务流程的情况下,优雅地处理后台的定时任务,提升系统的整体效率。理解并熟练运用这两个类,对于开发高效、稳定的Java应用程序至关重要。

    TimerTask_Demo.zip

    在Java编程语言中,`Timer`和`TimerTask`是两个重要的类,它们用于实现定时任务的调度。这个"TimerTask_Demo.zip"文件提供了一个简单的示例,演示了如何利用这两个类来创建一个每日自动执行的任务。下面将详细介绍`...

    JavaWeb开发技术-实现网页定时刷新并跳转.pptx

    我们可以使用 Java 中的 Timer 类来实现定时任务,例如使用 TimerTask 来执行定时任务。 在 PPTX 文件中,我们提供了一个简单的示例代码,展示如何使用 Java Servlet 来实现网页定时刷新并跳转。这个示例代码包括...

    timer写的一个任务测试类

    在"TaskDemo"这个文件中,可能包含了使用`Timer`和`TimerTask`实现的具体示例代码,例如定义了定时打印消息、执行数据库操作或其他业务逻辑的任务。通过查看和学习这个示例,你可以更好地理解`Timer`类的工作原理和...

    java写定时任务,定时任务、定时器详细示例

    本文将深入探讨如何使用Java标准库中的`java.util.Timer`和`java.util.TimerTask`来实现定时任务。 ### 原理详解 在Java中,`java.util.Timer`类提供了调度定时任务的功能,而`java.util.TimerTask`则是执行这些...

    Timer累计计时器,利用系统时间计时 含代码注释

    在编程领域,定时器(Timer)是一个...在实际项目中,可以根据需求调整Timer的参数,以满足不同场景下的定时任务需求。提供的压缩包文件"Timer完成"可能包含更详细的代码实现和示例,读者可以下载后进一步学习和研究。

    在Spring中使用Timer --实现由时间触发的事件任务.doc

    在Spring框架中,有时我们需要实现基于时间触发的事件任务,例如定期执行某些...对于简单的定时任务,`java.util.Timer`和`TimerTask`可能是合适的;对于更复杂的需求,Spring的定时任务支持提供了更多的灵活性和控制。

    安卓图片轮播广告轮播自动滚屏相关-用ViewPager实现手动切换用TimerHandler实现自动切换左右完美无限滑动效果非常平滑.zip

    开发者可以通过设置`setOnPageChangeListener()`监听滑动事件,例如获取当前显示的页面索引,以便进行其他业务逻辑处理。 4. **自动切换**:要实现自动切换,我们可以使用`java.util.Timer`和`java.lang.Handler`。...

    定时刷新在一定时间需要处理的数据示例

    2. **Java Timer/TimerTask**: 对于Java开发者,可以使用内置的Timer和TimerTask类来创建定时任务。这些任务可以是任何实现了Runnable接口的对象,因此可以灵活地处理数据刷新逻辑。 3. **Spring框架的@Scheduled**...

    java写定时任务,定时任务、定时器详细示例.pdf

    - 创建`TimerTask`子类:定义一个实现了`run()`方法的类,该方法包含定时任务的业务逻辑。 - 创建`Timer`实例:`Timer timer = new Timer();` - 安排任务:使用`timer.schedule()`方法将`TimerTask`添加到定时器中。...

    JAVA将一个数据中数据定时自动复制(抽取)到另一个数据库

    2. **定时任务**:Java提供了多种方式实现定时任务,如`java.util.Timer`和`TimerTask`,但更推荐使用`java.time`包中的`ScheduledExecutorService`,因为它提供了更精确的定时控制和更好的并发性能。我们可以通过`...

Global site tag (gtag.js) - Google Analytics