Java定时器问题实例解析
程序员文章站
2024-02-28 10:12:58
定时器问题
定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持。一个定时器的实现需要具备以下四种基本...
定时器问题
定时器属于基本的基础组件,不管是用户空间的程序开发,还是内核空间的程序开发,很多时候都需要有定时器作为基础组件的支持。一个定时器的实现需要具备以下四种基本行为:添加定时器、取消定时器、定时器检查、到期执行。
请设计一个定时器并实现以下三种基本行为,函数原型已给出,可使用任意编程语言设计数据结构及实现,并尽可能高效地支持大量定时器:
// 添加定时器:经过特定时间间隔后执行目标操作
// 输入 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); } }
希望本篇文章可以帮助到您
上一篇: 针对浏览器隐藏CSS之独孤九剑