zoukankan      html  css  js  c++  java
  • 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 = "")注解来设置定时器

  • 相关阅读:
    Linux C++ 处理 Kill 信号、Ctrl+C信号,便于安全退出
    静态链接libcurl的步骤
    编译器如何C++的函数重载
    单链表逆序 也叫反转
    VC 创建拨号连接A
    强大的vim配置,让编程更随意
    已知二叉树后序遍历序列是DBCEFGHA,中序遍历序列EDCBAHFG,它的前序遍历的序列是?麻烦再画下这二叉树.
    怎样使用IPV6编程
    全面详细介绍libcurl的使用
    ZeroMQ全面介绍
  • 原文地址:https://www.cnblogs.com/pass-ion/p/13452601.html
Copyright © 2011-2022 走看看