当前位置: 移动技术网 > IT编程>开发语言>Java > Java定时器问题实例解析

Java定时器问题实例解析

2019年07月22日  | 移动技术网IT编程  | 我要评论

乔四爷照片,博雅论坛,哑巴小新娘 总裁的逃妻

定时器问题

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

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

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

  // 输入 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);
 }
}

希望本篇文章可以帮助到您

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网