zoukankan      html  css  js  c++  java
  • 工具类篇——util包下Timer类的延迟执行

    Timer类是用来做定时器的关键类,其实质是在线程中定时调用任务方法的实现。

    timer.schedule(TimerTask,int,int)实现的是循环调用任务方法,在TimerTask中就是一个线程的run()方法,需要自己重写,第二个参数是从多少毫秒开始执行run(),第三个参数是执行完run()后多少毫秒再次执行。

    timer.schedule(TimerTask,int)实现的是单次定时调用任务方法,在TimerTask中就是一个线程的run()方法,需要自己重写,第二个参数是从多少毫秒后开始执行run()。

    timer.scheduleAtFixedRate(TimerTask,int,int)实现的是循环调用任务方法,在TimerTask中就是一个线程的run()方法,需要自己重写,第二个参数是从多少毫秒开始执行run(),第三个参数是执行完run()后多少毫秒再次执行。与上面timer.schedule(TimerTask,int,int)功能上相似,实质上前者的执行时间是当前应该通过的时间,而后者的执行时间是当前实际通过的时间。例如:规定每隔5秒调用一次任务,当调用到5次的时候,分别在5,10,15,20,25秒的时候调用任务,但是由于某种原因在5秒的时候程序没有调用而在7秒的时候调用,这样算来下一次的调用时间是12秒,不是原来的第10秒,当第25秒的时候才只调用了4次任务方法,而理论上应该调用5次。也就是说当执行任务超点或者早点的时候,前者能够灵活调用任务使得在规定计算出的时间内达到规定的调用次数,而后者只能按照超点或早点的时间计算,这样后者就可能会少调用或多调用任务次数。

  • 相关阅读:
    委托(delegate)的三种调用方式:同步调用,异步调用,异步回调(转载)
    C#异步:实现一个最简单的异步
    关于Thread.IsBackground属性的理解(转载)
    C# 中的多线程(转载)
    个人对AutoResetEvent和ManualResetEvent的理解(转载)
    C#线程系列讲座(4):同步与死锁
    Nginx location 配置踩坑过程分享
    微信扫码登录网页实现原理
    负载均衡SLB
    Tomcat学习
  • 原文地址:https://www.cnblogs.com/zzb-yp/p/9259746.html
Copyright © 2011-2022 走看看