`
2xusi
  • 浏览: 4528 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java定时任务,schedule和scheduleAtFixedRate

阅读更多
原文:http://blog.iseexn.com/archives/376.html

import java.util.Timer;
import java.util.TimerTask;
import java.util.Date;

/**
* @author vincent
*/
public class TimerTest {

public static void main(String[] args) {
   Timer t = new Timer();
  
  //在5秒之后执行TimerTask的任务
   t.schedule(new TimerTask(){
      public void run()
      {System.out.println("this is task you do1");}
     },5*1000);

   //在Date指定的特定时刻之后执行TimerTask的任务
   Date d1 = new Date(System.currentTimeMillis()+1000);
   t.schedule(new TimerTask(){
    public void run()
    {System.out.println("this is task you do2");}
   },d1);

   //在Date指定的特定时刻之后,每隔1秒执行TimerTask的任务一次
   Date d2 = new Date(System.currentTimeMillis()+1000);
   t.schedule(new TimerTask(){
    public void run()
    {System.out.println("this is task you do3");}
   },d2,1*1000);

  //在3秒之后,每隔1秒执行TimerTask的任务一次
   t.schedule(new TimerTask(){
    public void run()
    {System.out.println("this is task you do4");}
   },3*1000,1*1000);
  
   //在3秒之后,绝对每隔2秒执行TimerTask的任务一次

   t.scheduleAtFixedRate(new TimerTask(){
    public void run()
    {System.out.println("this is task you do6");}
   },3*1000,2*1000);
}

schedule和scheduleAtFixedRate的区别在于,如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行,而schedule不会把过去的时间算上。

比如

SimpleDateFormat fTime = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date d1 = fTime.parse("2005/12/30 14:10:00");
  
   t.scheduleAtFixedRate(new TimerTask(){
    public void run()
    {
        System.out.println("this is task you do6");
    }
   },d1,3*60*1000);

间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,如果我在14:17:00分执行这个程序,那么会立刻打印3次

this is task you do6      //14:10
this is task you do6      //14:13
this is task you do6      //14:16

并且注意,下一次执行是在14:19 而不是 14:20。就是说是从指定的开始时间开始计时,而不是从执行时间开始计时。

但是上面如果用schedule方法,间隔时间是3分钟,指定开始时间是2005/12/30 14:10:00,那么在14:17:00分执行这个程序,则立即执行程序一次。并且下一次的执行时间是 14:20,而不是从14:10开始算的周期(14:19)。

}


分享到:
评论

相关推荐

    Java定时任务schedule和scheduleAtFixedRate的异同

    总结,`schedule`和`scheduleAtFixedRate`都是Java中强大的定时任务工具,但适用场景不同。前者适用于一次性或延迟执行的场景,后者则适用于需要持续、周期性执行的场景。在实际开发中,根据任务的特性和需求选择...

    Java Timer:schedule和scheduleAtFixedRate

    总结来说,`Timer` 类的 `schedule` 和 `scheduleAtFixedRate` 方法是Java中进行定时任务调度的关键工具。`schedule` 适合单次延迟执行,而 `scheduleAtFixedRate` 则用于保证任务以固定频率周期性执行。了解并熟练...

    java定时任务小例子

    在这个“java定时任务小例子”中,我们可以看到两个关键文件:`TimerTest.java`和`DoTask.java`,它们分别代表了定时器的任务调度和实际执行任务的组件。 首先,我们来看`TimerTest.java`。这个文件很可能是整个...

    java 定时任务及jar包

    long delay, TimeUnit unit)`方法与`Timer`类中的类似,但它们是基于线程池的,更适合并发环境,且支持取消任务和控制线程池大小。 3. Spring框架中的定时任务: - 在Spring应用中,我们可以使用`@Scheduled`注解...

    Java定时执行某个任务

    总结起来,Java提供了`Timer`和`ScheduledExecutorService`两种方式来实现定时执行任务。`Timer`适合简单的定时任务,而`ScheduledExecutorService`更适合复杂的需求,如多线程环境和高并发场景。选择哪种方式取决于...

    java中timer的schedule和scheduleAtFixedRate方法区别详解

    Java 中的 Timer 类提供了两个常用的方法:schedule 和 scheduleAtFixedRate,用于安排和执行定时任务。虽然这两个方法看起来很相似,但是它们之间存在着重要的区别。本文将详细介绍这两个方法的区别,帮助读者更好...

    JAVA定时任务调度

    Java定时任务调度是Java开发中一个非常重要的技术领域,它允许开发者在特定的时间点或按照预定义的周期执行任务,从而实现自动化的工作流程。在Java中,我们可以使用多种方式来实现定时任务,如Java内置的`java.util...

    java定时任务调度之Timer 简单示例

    Java定时任务调度是Java应用程序中常见的一种功能,用于在特定时间执行特定任务,例如定期备份、数据清理等。`Timer`类是Java中用于实现定时任务调度的一个基础工具,它位于`java.util`包中。在本文中,我们将深入...

    java 定时执行任务

    Java定时执行任务是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段代码。在Java中,有两种主要的方式来实现定时任务:Java.util.Timer类和java.util.concurrent包下的ScheduledExecutorService...

    java定时器定时调用任务

    4. 取消任务和关闭定时器:如果不再需要定时任务,可以使用`cancel()`方法取消任务,用`timer.cancel()`停止整个定时器。 ```java myTask.cancel(); // 取消单个任务 timer.cancel(); // 关闭定时器 ``` 在实际...

    定时任务(java)

    Java提供了一些内置的工具和框架来支持定时任务的实现,这些工具能够帮助开发者灵活地管理周期性任务,提高代码的可维护性和效率。 首先,Java内置了`java.util.Timer`和`java.util.TimerTask`类,它们提供了基本的...

    JAVA定时任务

    通过实现`Runnable`或`Callable`接口并使用`ScheduledExecutorService`的`schedule`、`scheduleAtFixedRate`和`scheduleWithFixedDelay`方法来安排任务。 2. **Timer和TimerTask** 在较早的Java版本中,`java.util...

    java每天实现定点执行任务

    在Java编程环境中,实现每天定点...`java.util.Timer`和`ScheduledExecutorService`适合简单的定时任务,而Quartz更适合大型项目,需要更复杂的调度规则。在实际应用中,还需考虑线程安全、异常处理和资源关闭等问题。

    Java定时任务

    `ScheduledExecutorService` 提供了`schedule()`, `scheduleAtFixedRate()`, 和 `scheduleWithFixedDelay()`等方法,可以根据需要选择合适的方式安排任务。 3. **Spring框架的@Scheduled注解**: 在Spring应用中,...

    java定时检测系统

    Java定时检测系统是一种基于Java编程语言实现的自动化解决方案,它能够按照预设的时间间隔执行特定的任务,例如数据更新、文件修改、系统监控等。在Java中实现这样的功能,主要依赖于以下几个关键知识点: 1. **...

    java定时执行代码.

    Java定时执行代码是Java开发中常见的一种需求,用于在特定时间点或按照预设周期执行某段任务。Java提供了多种实现定时任务的机制,这里主要介绍两种:Java.util.Timer类和java.util.concurrent....

    java 定时 发送 信息类似于闹钟

    你可以创建一个`Timer`对象,然后使用`schedule(TimerTask task, Date firstTime)`方法来安排任务在指定的日期和时间执行一次,或者使用`scheduleAtFixedRate(TimerTask task, Date firstTime, long period)`来安排...

    Timer定时任务

    Java中的`java.util.Timer`类和`java.util.TimerTask`类为我们提供了实现定时任务的能力。这篇文档将深入探讨`Timer`定时任务的相关知识点,并结合实际应用进行解析。 首先,`Timer`类是一个线程类,用于调度任务在...

    java Schedule

    通过`ScheduledExecutorService`,你可以使用`schedule()`, `scheduleAtFixedRate()`, 和 `scheduleWithFixedDelay()` 方法来安排一次性任务和周期性任务,并且这些任务会在单独的工作线程中执行,互不影响。...

Global site tag (gtag.js) - Google Analytics