Timer详解

TimerTimerTask用于在后台线程中调度任务的java.util类。TimerTask负责任务的执行,Timer负责任务的调度。

定时功能

Timer提供了三种定时模式:

  • 一次性任务
  • 按照固定的延迟执行(fixed delay)
  • 按照固定的周期执行(fixed rate

执行一次

Timer提供了两种方法,应用于不同场景:

//在当前时间往后delay个毫秒开始执行
public void schedule(TimerTask task, long delay) {...}
//在指定的time时间点执行
public void schedule(TimerTask task, Date time) {...}
public static void main(String[] args) {
    //定义一个Timer
    Timer timer = new Timer("test-timer");
    //定义一个TimerTask
    TimerTask task = new TimerTask() {
        @Override
        public void run() {
            System.out.println("任务执行时间:"   new Date()   "------------"
                                 "线程:"   Thread.currentThread().getName());
        }
    };
    long delay = 3000L;
    timer.schedule(task, delay);
    System.out.println("任务添加时间:"   new Date()   "------------"
                         "线程:"   Thread.currentThread().getName());
}

工作方式:当达到我们指定的时间,执行一次结束

任务虽然运行结束,但进程没有被销毁。并且执行任务的线程名为我们定义的Timer的名称。

我们看一下源码:

public class Timer {
    //小顶堆,用来存放timeTask
    private final TaskQueue queue = new TaskQueue();
    
    private final TimerThread thread = new TimerThread(queue);
    
    public Timer(String name) {
        thread.setName(name);
        thread.start();
    }
}
public abstract class TimerTask implements Runnable {
    long nextExecutionTime;
    long period = 0;
    public abstract void run();
}
  • TaskQueue:基于小顶堆实现,用来存放timerTask
  • TimerThread:任务执行线程,继承Thread
  • nextExecutionTime:假如任务需要多次执行表示下一次执行时间
  • period:每次任务执行间隔时间
  • run():我们执行任务的内容

创建一个 Timer 对象就是新启动了一个线程,但是这个新启动的线程,并不是守护线程,它一直在后台运行,通过如下 可以将新启动的 Timer 线程设置为守护线程。我们可以使用以下构造方法(public Timer(boolean isDaemon)public Timer(String name, boolean isDaemon))来设置。

Fixed Delay模式

//从当前时间开始delay个毫秒数开始定期执行,周期是period个毫秒数
public void schedule(TimerTask task, long delay, long period) {...}
////从指定的firstTime开始定期执行,往后每次执行的周期是period个毫秒数
public void schedule(TimerTask task, Date firstTime, long period){...}

工作方式:

  • 第一次执行,按照指定时间开始(如果此时TimerThread没有执行其他任务),如有其他任务在执行,那就需要等到其他任务执行完成才能执行
  • 第二次执行,每次任务是上一次任务开始执行时间加上执行的period时间。

到此这篇关于Java定时器通信协议管理模块Timer详解的文章就介绍到这了,更多相关Java Timer内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Java定时器通信协议管理模块Timer详解的更多相关文章

  1. swift 定时器的使用

    参考:http://www.cnblogs.com/sxlfybb/p/3792611.htmlNSTimer有2个构造函数注意到,注释为未继承,所以两个构造不能用NSTimer有2个静态实例在swift中,找不到NSInvocation类,日了狗了还好有另一种使用静态函数的形式去实例化:

  2. Swift - 时间控制器NSTimer每隔一定时间执行某个函数

  3. Swift/OC计时器使用方法

    .invalidate();timer=nil;}

  4. swift3.0 Timer 定时器

    贡献者:赵大财博客:https://my.oschina.net/zhaodacaiGitHub:https://github.com/zhaodacai邮箱:zhaodacai@yeah.comQQ:327532817=============================

  5. 在Swift中使用NSTimer

    在这种情况下,timerFunc()从未被调用。您可以创建一个自动将自己添加到runloop并开始启动的计划定时器:或者,你可以保留你当前的代码,并添加定时器runloop当你准备好了:

  6. 使用Android中的加速度计准确检测移动

    我正在实施一个演示TIMER,具有振动(在特定条件下),当我按开始我的定时器开始运行..当我停止它使用停止按钮,它只是停止.现在我必须集成一个功能,当人员移动设备(在定时器运行时),它应该重置定时器.它的工作相当不错,但是加速度计的功能并不是绝对准确的.需要一个快速的跳动来重置定时器.给我一个很好的解决方案.这是我的代码}计时器活动解决方法我认为开发应用程序的下一个阶段是查看电子表格中生成的加速度

  7. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  9. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  10. Java实现世界上最快的排序算法Timsort的示例代码

    Timsort 是一个混合、稳定的排序算法,简单来说就是归并排序和二分插入排序算法的混合体,号称世界上最好的排序算法。本文将详解Timsort算法是定义与实现,需要的可以参考一下

随机推荐

  1. 基于EJB技术的商务预订系统的开发

    用EJB结构开发的应用程序是可伸缩的、事务型的、多用户安全的。总的来说,EJB是一个组件事务监控的标准服务器端的组件模型。基于EJB技术的系统结构模型EJB结构是一个服务端组件结构,是一个层次性结构,其结构模型如图1所示。图2:商务预订系统的构架EntityBean是为了现实世界的对象建造的模型,这些对象通常是数据库的一些持久记录。

  2. Java利用POI实现导入导出Excel表格

    这篇文章主要为大家详细介绍了Java利用POI实现导入导出Excel表格,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. Mybatis分页插件PageHelper手写实现示例

    这篇文章主要为大家介绍了Mybatis分页插件PageHelper手写实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  4. (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    网页上嵌入播放器,只要在HTML上添加以上代码就OK了,下面整理了一些常用的播放器代码,总有一款适合你,感兴趣的朋友可以参考下哈,希望对你有所帮助

  5. Java 阻塞队列BlockingQueue详解

    本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景,通过实例代码介绍了Java 阻塞队列BlockingQueue的相关知识,需要的朋友可以参考下

  6. Java异常Exception详细讲解

    异常就是不正常,比如当我们身体出现了异常我们会根据身体情况选择喝开水、吃药、看病、等 异常处理方法。 java异常处理机制是我们java语言使用异常处理机制为程序提供了错误处理的能力,程序出现的错误,程序可以安全的退出,以保证程序正常的运行等

  7. Java Bean 作用域及它的几种类型介绍

    这篇文章主要介绍了Java Bean作用域及它的几种类型介绍,Spring框架作为一个管理Bean的IoC容器,那么Bean自然是Spring中的重要资源了,那Bean的作用域又是什么,接下来我们一起进入文章详细学习吧

  8. 面试突击之跨域问题的解决方案详解

    跨域问题本质是浏览器的一种保护机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。那怎么解决这个问题呢?接下来我们一起来看

  9. Mybatis-Plus接口BaseMapper与Services使用详解

    这篇文章主要为大家介绍了Mybatis-Plus接口BaseMapper与Services使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. mybatis-plus雪花算法增强idworker的实现

    今天聊聊在mybatis-plus中引入分布式ID生成框架idworker,进一步增强实现生成分布式唯一ID,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

返回
顶部