• 技术文章 >Java >java教程

    实例解析Java定时器问题

    Y2JY2J2017-05-02 14:18:40原创583
    这篇文章主要结合实例介绍了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);
     }
    }

    以上就是实例解析Java定时器问题的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:Java,定时器
    上一篇:实例详解java对象拷贝 下一篇:Java枚举_动力节点整理归纳
    PHP编程就业班

    相关文章推荐

    • JAVA学习IO操作之字节流和字符流(总结分享)• 完全掌握JAVA流程控制• Java学习总结之数组(整理分享)• Java工厂方法模式详解• 详细整理java枚举的使用总结

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网