Timer - 基础篇

简介: Timer - 基础篇

定时任务调度:基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行任务。

  • Timer由JDK自带,不需要引入多余的jar。
  • Quartz需要引入架包,Quartz时间控制更强大,Timer只有一个后台线程执行任务,Quartz拥有后台执行线程池能够使用多个线程执行任务。
  • 能用 Timer 处理的时候,尽量用 Timer 处理。因为 Quartz 需要的资源更多(写法也不一样)。

schedule的四种用法:

用法一:
API:schedule(task, time)
参数:task - 表示所要安排的任务,time - 表示执行任务的时间。
作用:在时间等于或超过time的时候执行且仅执行一次task。

用法二:
API:schedule(task, time, period)
参数:task - 所要安排的任务,
time - 首次执行任务的时间,period - 执行一次task的时间间隔,单位是毫秒。
作用:时间等于或超过time时首次执行task,之后每隔period毫秒重复执行一次task。

用法三:
API:schedule(task, delay)
参数:task - 所要安排的任务,delay - 执行任务前的延迟时间,单位是毫秒。
作用:等待delay毫秒后执行且仅执行一次task。

用法四:
API:schedule(task, delay, period)
参数:task - 所要安排的任务,
delay - 执行任务前的延迟时间,单位是毫秒,period - 执行一次task的时间间隔,单位是毫秒。
作用:等待delay毫秒后首次执行task,之后每隔period毫秒重复执行一次task。

注意:delay属于long类型,time属于Date类型。

scheduleAtFixedRate的两种用法:

用法一:
API:scheduleAtFixedRate(task, time, period)
参数:task - 所要安排的任务
,time - 首次执行任务的时间,period - 执行一次task的时间间隔,单位是毫秒。
作用:时间等于或超过time时首次执行task
,之后每隔period毫秒重复执行一次task。

用法二:
API:scheduleAtFixedRate(task, delay, period)
参数:task - 所要安排的任务,
delay - 执行任务前的延迟时间,单位是毫秒,period - 执行一次task的时间间隔,单位是毫秒。
作用:等待delay毫秒后首次执行task,
之后每隔period毫秒重复执行一次task。

其他重要函数:

1、TimerTask的cancel(),scheduledExecutionTime()

cancel():
作用:取消当前TimerTask里的任务。

scheduledExecutionTime():
作用:返回此任务最近实际执行的已安排执行的时间。
返回值:最近发生此任务执行安排的时间,为long型。

2、Timer的cancel(),purge()
cancel():
作用:终止计时器,丢弃所有已安排的任务。

purge():
作用:从此计时器的任务队列中移除所有已取消的任务。
返回值:为从队列中移除的任务数。

schedule和scheduleAtFixedRate的区别:

区别一:

Ps1:schedule:时间回到过去,但是开始执行时以一次到达正常时间,然后间隔时间输出。

Ps2:scheduleAtFixedRate:同样时间回到过去,但是开始执行多次到达正常时间,然后间隔时间输出。

区别二:

Ps1:schedule:下次开始执行的时间以上次run方法完成时间为基准。

Ps2scheduleAtFixedRate:下次开始执行的时间以上次run方法开始时间为基准。

Timer 缺陷:

  1. 管理并发任务的缺陷
    每次有且仅有一个线程去执行定时任务,如存在多任务会导致任务时间过长(串行)
  2. 当任务抛出异常时的缺陷
    当抛出RuntimeException(如果不捕捉异常),会停止所有任务
  3. 在以下情况禁止使用
    对时效性要求较高的多任务并发作业,或者一些复杂的任务作业。
目录
相关文章
|
3月前
|
缓存 调度 数据库
Python中的定时器用法:Timer定时器和schedule库
Python中的定时器用法:Timer定时器和schedule库
197 0
|
1月前
|
测试技术 PHP
Swoole 源码分析之 Timer 定时器模块
Swoole 中的毫秒精度的定时器。底层基于 `epoll_wait` 和 `setitimer` 实现,数据结构使用最小堆,可支持添加大量定时器。
51 0
Swoole 源码分析之 Timer 定时器模块
|
3月前
|
C++
QT定时器的使用timer示例
QT定时器的使用timer示例
|
3月前
|
Go
Go 定时器:Timer 和 Ticker
本文深入探讨了 Go 语言中的 Timer 和 Ticker 定时器,详细介绍了它们的创建方式、基本用法以及相关的方法等。此外,文章还概括了这两个定时器之间的主要区别,并强调了在使用过程中的注意事项。
96 2
Go 定时器:Timer 和 Ticker
|
Java 测试技术
在多线程中自定义实现定时器(Timer)
在多线程中自定义实现定时器(Timer)
|
消息中间件 Java C#
C# 三个Timer
C# 三个Timer
260 0
C# 三个Timer
定时器Timer使用教程
本文讲解定时器Timer的使用教程。
180 0
|
安全 调度
定时器Timer详细解析与举例
定时器java.util.Timer:功能是在指定的时间间隔内反复触发指定任务的定时器事件,主要用于定时性、周期性任务的触发。
|
API 调度 Android开发
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
845 0