`
zhaohaolin
  • 浏览: 1016740 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Timer和ScheduledThreadPoolExecutor的区别

    博客分类:
  • JAVA
 
阅读更多

Timer的主要方法有:

// 安排在指定的时间执行
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)
注: 重复的延时和重复的速率的区别在于,前者是在前一个任务的执行结束后间隔period时间再开始下一次执行;而scheduleAtFixedRate则 是会尽量按照任务的初始时间来按照间隔period时间执行。如果一次任务执行由于某些原因被延迟了,用schedule()调度的后续任务同样也会被延 迟,而用scheduleAtFixedRate()则会快速的开始两次或者多次执行,是后续任务的执行时间能够赶上来。

ScheduledThreadPoolExecutor的主要方法:
// 在指定的延迟后执行
<V>ScheduledFuture<V> schedule(Callable<V> callable, long delay, TimeUnit unit)
// 在指定的延迟后执行
ScheduledFuture<?> schedule(Runnable command, long delay, TimeUnit unit)
// 在指定的延迟后以固定速率执行(类似Timer.scheduleAtFixedRate())
ScheduledFuture<?> scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
// 在指定的延迟后以固定间隔执行(类似Timer.schedule())
ScheduledFuture<?> scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

比较:
·Timer对调度的支持是基于绝对时间的,因此任务对系统时间的改变是敏感的;而ScheduledThreadPoolExecutor支持相对时间。
·Timer使用单线程方式来执行所有的TimerTask,如果某个TimerTask很耗时则会影响到其他TimerTask的执行;而ScheduledThreadPoolExecutor则可以构造一个固定大小的线程池来执行任务。
·Timer 不会捕获由TimerTask抛出的未检查异常,故当有异常抛出时,Timer会终止,导致未执行完的TimerTask不再执行,新的 TimerTask也不能被调度;ScheduledThreadPoolExecutor对这个问题进行了妥善的处理,不会影响其他任务的执行。

结论:
Timer有这么多的缺点,如果是使用JDK1.5以上的话,应该没什么理由要使用Timer来进行调度把:)
分享到:
评论

相关推荐

    定时器Timer

    在Java中,`java.util.Timer` 和 `java.util.TimerTask` 是实现定时任务的主要组件。创建一个 `Timer` 实例,然后创建一个 `TimerTask` 的子类实例,最后通过 `schedule()` 方法将任务添加到 `Timer` 中。 ```...

    详解JAVA Timer和TimerTask

    Timer和ScheduledThreadPoolExecutor 从JDK5开始,可以使用ScheduledThreadPoolExecutor来替代Timer。ScheduledThreadPoolExecutor提供了更强大的调度功能,可以实现更复杂的定时任务。例如,可以使用...

    java_Timer_thread.rar_java thread timer_java timer_java 定时器_java

    - Java 5及以上版本引入了`java.util.concurrent`包,提供了`ScheduledExecutorService`接口和其实现类,如`ScheduledThreadPoolExecutor`。这个新的API更加灵活,支持并发任务,并且提供了更高级的定时和调度功能...

    定时器Timer用法及其源码

    `ScheduledThreadPoolExecutor`实现了这个接口,提供了更强大、更灵活的定时任务管理能力,支持多线程并发执行,同时处理中断和异常更为完善。 总结,`Timer`类是Java中基础的定时任务工具,适用于简单的定时需求。...

    Java中Timer的用法详解

    虽然`Timer` 类在许多情况下足够使用,但Java 5 引入的`java.util.concurrent` 包提供了更强大且线程安全的定时执行工具,如`ScheduledExecutorService` 和 `ScheduledThreadPoolExecutor`。这些类提供了更多的控制...

    Java自带定时任务ScheduledThreadPoolExecutor实现定时器和延时加载功能

    在Java 1.6版本之后,`java.util.concurrent` 包下引入了`ScheduledThreadPoolExecutor`,这是一个非常强大的工具,可以实现定时器和延时加载功能,相比旧的`Timer`类,它提供了更多的控制和并发处理能力。...

    java定时器应用 timertask类

    Java 5之后,`ScheduledExecutorService`和`ScheduledThreadPoolExecutor`提供了更强大的定时任务处理能力,它们是基于并发包(`java.util.concurrent`)的,具有更好的线程管理和取消任务的能力,因此在现代Java开发...

    SpringBoot官方支持任务调度框架,轻量级用起来也挺香!.doc

    - Timer 和 ScheduledThreadPoolExecutor 更适合简单定时任务,尤其是对精度要求不高的情况。 - Spring Task 对于大部分应用已经足够,其基于注解的编程模型简洁易用,适用于大部分定时任务场景。 - Quartz 则是针对...

    java schedule

    除了`Timer`和`TimerTask`,Java 5引入了`java.util.concurrent`包,其中包含更强大的`ScheduledExecutorService`接口和`ScheduledThreadPoolExecutor`类。`ScheduledExecutorService`提供了一组用于延迟执行或定期...

    java定时器服务!!

    在Java中,我们通常使用`java.util.Timer`类和`java.util.TimerTask`类来实现定时服务。这两个类提供了创建、调度和管理定时任务的能力。 `java.util.Timer`类是一个线程安全的类,它用于创建一个定时调度器,可以...

    java定时器

    `ScheduledThreadPoolExecutor`是实现该接口的一个类,可以替代`Timer`类以获得更好的性能和灵活性。 7. **使用场景**:Java定时器适用于多种场景,如定期检查数据库连接、定期备份数据、执行清理任务、实现心跳...

    paobiao.rar_定时器

    在Java编程语言中,`Timer`类和`TimerTask`类是实现定时任务的核心工具,它们位于`java.util`包中。本示例通过创建一个简单的定时器来模拟秒表的功能,这涉及到对时间的精确控制和事件调度,是多线程编程的一个重要...

    java在服务启动的时候启动定时器

    在Java中,我们可以使用多种库来实现这个功能,其中最常用的两个是`java.util.Timer`和`java.util.concurrent.ScheduledExecutorService`。 ## 1. `java.util.Timer` `Timer`类是Java标准库中的一个基础定时器,...

    Timer.rar_Windows编程_Unix_Linux_

    Timers schedule one-shot or recurring TimerTask tasks for execution. Prefer java.util.concurrent.ScheduledThreadPoolExecutor ScheduledThreadPoolExecutor for new code.

    Java语言定时调度任务之实现.pdf

    Java的Executor框架提供了线程池管理的相关类,如ThreadPoolExecutor和ScheduledThreadPoolExecutor,后者支持定时或周期性的任务调度。 线程池调度的优点在于可以重用线程,减少线程创建和销毁的开销,提高执行...

    定时程序-java版

    在Java编程语言中,实现定时任务是通过使用定时器(Timer)类和相关的调度接口来完成的。定时程序是任何应用程序中的重要组成部分,它允许在特定时间间隔执行某些任务,或者在预设的时间点触发事件。Java提供了丰富...

    java实现定时器代码

    Java定时器是Java编程语言中用于执行预定任务的工具,主要通过`java.util.Timer`类和`java.util.TimerTask`类来实现。这两个类提供了在指定时间间隔内重复执行任务的功能,非常适合用来创建周期性的后台任务。下面...

    JAVA定时任务

    例如,通过阅读`ScheduledThreadPoolExecutor`的源码,我们可以了解其调度策略和线程池的管理方式。同时,利用IDE(如IntelliJ IDEA或Eclipse)的调试工具,可以帮助我们更好地理解定时任务的执行流程。 此外,工具...

    java 写的定时器

    在Java中,有两种主要的定时器类:`java.util.Timer` 和 `java.util.concurrent.ScheduledExecutorService`。本文将详细讲解这两种定时器的用法、优缺点以及如何在实际项目中应用它们。 ### 1. `java.util.Timer` ...

    javathread类源码-Java-ScheduledThreadPoolExecutor-Demo:教程的源代码

    java线程类源码Java ScheduledThreadPoolExecutor演示 java.util.concurrent ScheduledThreadPoolExecutor作为java.util.Timer类的现代替代。

Global site tag (gtag.js) - Google Analytics