• 技术文章 >Java >java教程

    Java实现定时器功能的代码详解

    Y2JY2J2017-05-17 09:19:39原创1133
    这篇文章主要结合实例介绍了java当中的定时器的一些问题,有需要的朋友可以参考一下

    定时器问题

      定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持。一个定时器的实现需要具备以下四种基本行为:添加定时器、取消定时器、定时器检查、到期执行。

      请设计一个定时器并实现以下三种基本行为,函数原型已给出,可使用任意编程语言设计数据结构及实现,并尽可能高效地支持大量定时器:  

    // 添加定时器:经过特定时间间隔后执行目标操作

      // 输入 1:Interval 定时器时间,单位ms

      // 输入 2:ExpiryAction 目标操作

      // 返回:定时器 Id

      StartTimer(Interval, ExpiryAction) -> TimerId

      // 取消定时器

      // 输入:定时器 Id

      StopTimer(TimerId)

      // 定时器检查

      // 系统每隔 10ms 会调用一次该函数

      PerTickBookkeeping()

      话不多说,直接上代码:

      1)Timer.java:


    import java.util.ArrayList;
    public class Timer {
     private long interval; // 定时器时间,单位 ms
     private String expiryAction; // 目标操作
     private int timerId; // 定时器Id
     private long waitTime; // 定时器等待时间 
     // 构造函数
     public Timer(){
      this.waitTime = 0;
     } 
     // 添加定时器
     public int StartTimer(long interval, String expiryAction, int id){
      this.interval = interval;
      this.expiryAction = expiryAction;
      this.timerId = id;
      return timerId;
     } 
     // 取消定时器
     public void StopTimer(int timerId, ArrayList<Timer> timer){
      timer.remove(timerId);
     }
     // 定时器检查
     public void PerTickBookkeeping(){
      if (this.interval > this.waitTime)
       this.waitTime += 10;
      else{
       System.out.println("定时器"+this.timerId+":"+this.expiryAction);
       this.waitTime = 0;
      }
     }
     public long getInterval() {
      return interval;
     }
     public void setInterval(long interval) {
      this.interval = interval;
     }
     public String getExpiryAction() {
      return expiryAction;
     }
     public void setExpiryAction(String expiryAction) {
      this.expiryAction = expiryAction;
     }
     public int getTimerId() {
      return timerId;
     }
     public void setTimerId(int timerId) {
      this.timerId = timerId;
     }
     public long getWaitTime() {
      return waitTime;
     }
     public void setWaitTime(long waitTime) {
      this.waitTime = waitTime;
     }
    }

      2)DoTimer.java:

    import java.util.ArrayList;
    import java.util.Iterator;
    public class DoTimer extends Thread {
     private static ArrayList<Timer> timerList;
     public static void main(String[] args){
      timerList = new ArrayList<Timer>();
      Timer timer1 = new Timer();
      timer1.StartTimer(3000, "我是第一个定时器,等待3秒", 0);
      Timer timer2 = new Timer();
      timer2.StartTimer(4000, "我是第二个定时器,等待4秒", 1);
      timerList.add(timer1);
      timerList.add(timer2);  
      //public void run(){}
      new Thread(){
       @Override
       public void run() {
        while(true){
         Iterator<Timer> it = timerList.iterator();
         while(it.hasNext()){
          it.next().PerTickBookkeeping();
         }
         try {
          sleep(10);
         } catch (InterruptedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
         }
        }
       }
      }.start();
      timer1.StopTimer(timer1.getTimerId(), timerList);
     }
    }

    【相关推荐】

    1. 特别推荐“php程序员工具箱”V0.1版本下载

    2. Java免费视频教程

    3. 全面解析Java注解

    以上就是Java实现定时器功能的代码详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:详解Java 加密解密技术的分类和归纳 下一篇:关于java中Struts2配置的实例详解
    千万级数据并发解决方案

    相关文章推荐

    • 一文搞懂Java接口• 一起来理解Java中的泛型• 整理分享Java语言表达式的五个谜题• 详细整理java枚举的使用总结• java反射机制详细解析(总结分享)
    1/1

    PHP中文网