实例解析Java定时器问题

这篇文章主要结合实例介绍了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定时器问题的详细内容,更多请关注其它相关文章!

歌里唱的是“你离开我,就是旅行的意义”,

实例解析Java定时器问题

相关文章:

你感兴趣的文章:

标签云: