java 定时器

Timer定时器是单线程执行

定时器实现的流程:

(1)第一步:创建一个Timer。

(2)第二步:创建一个TimerTask。

(3)第三步:使用Timer执行TimerTask。

执行:

(1)schedule(task,time) 在时间等于或超过time的时候执行且只执行一次task,这个time表示的是例如2019年11月11日上午11点11分11秒。指的是时刻。

(2)schedule(task,time,period)

在时间等于或超过time的时候首次执行task,之后每隔period毫秒重复执行一次task 。这个time和上一个一样。

(3)schedule(task, delay)

在delay时间之后,执行且只执行一次task。这个delay表示的是延迟时间,比如说三秒后执行。

(4)schedule(task,delay,period)

在delay时间之后,开始首次执行task,之后每隔period毫秒重复执行一次task ,这个delay和上面的一样。

(5)scheduleAtFixedRate(task, time, period)

在时间等于或超过time的时候首次执行task,之后每隔period毫秒重复执行一次task 。这个time表示的是例如2019年11月11日上午11点11分11秒。指的是时刻。

(6)scheduleAtFixedRate(task, delay, period)

在delay时间之后,开始首次执行task,之后每隔period毫秒重复执行一次task ,这个delay表示的是延迟时间,比如说三秒后执行。

schedule和scheduleAtFixedRate的区别:

schedule:如果第一次执行时间被delay了,随后的执行时间按照上一次实际执行完的时间点进行计算 。scheduleAtFixedRate:如果第一次执行时间被delay了,随后的执行时间按上一次开始的时间进行计算,并且为了赶上进度会多次执行任务。

Timer存在的缺陷:

Timer是单线程执行,当有一个任务出现error的时候,所有的都停止执行。

推荐使用ScheduledExecutorService框架的定时器。

 

2. 采用@Scheduled(cron = "")注解来设置定时器

posted @ 2020-08-07 14:17  wangssd  阅读(500)  评论(0编辑  收藏  举报