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. 在以下情况禁止使用
    对时效性要求较高的多任务并发作业,或者一些复杂的任务作业。
目录
相关文章
|
5月前
|
Python
Pygame基础1-计时器timer
Pygame基础1-计时器timer
|
6月前
|
Go
Go 定时器:Timer 和 Ticker
本文深入探讨了 Go 语言中的 Timer 和 Ticker 定时器,详细介绍了它们的创建方式、基本用法以及相关的方法等。此外,文章还概括了这两个定时器之间的主要区别,并强调了在使用过程中的注意事项。
150 2
Go 定时器:Timer 和 Ticker
|
Java 测试技术
在多线程中自定义实现定时器(Timer)
在多线程中自定义实现定时器(Timer)
|
消息中间件 Java C#
C# 三个Timer
C# 三个Timer
287 0
C# 三个Timer
定时器Timer使用教程
本文讲解定时器Timer的使用教程。
201 0
|
安全 调度
定时器Timer详细解析与举例
定时器java.util.Timer:功能是在指定的时间间隔内反复触发指定任务的定时器事件,主要用于定时性、周期性任务的触发。
|
API 调度 Android开发
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
【Android 异步操作】Timer 定时器 ( Timer 与 TimerTask 基本使用 | Timer 定时器常用用法 | Timer 源码分析 )
906 0
|
C++
使用boost的deadline_timer实现一个异步定时器
概述 最近在工作上需要用到定时器,然后看到boost里面的deadline_timer可以实现一个定时器,所以就直接将其封装成了ATimer类,方便使用,ATimer有以下优点: 可以支持纳秒、毫秒、秒、分、小时定时。
4329 0