java bookkeeping_Java--定时器问题

定时器问题

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

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

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

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

// 输入 2:ExpiryAction 目标操作

// 返回:定时器 Id

StartTimer(Interval, ExpiryAction) -> TimerId

// 取消定时器

// 输入:定时器 Id

StopTimer(TimerId)

// 定时器检查

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

PerTickBookkeeping()

话不多说,直接上代码:

1)Timer.java:

1 importjava.util.ArrayList;2

3 public classTimer {4

5 private long interval; //定时器时间,单位 ms

6 private String expiryAction; //目标操作

7 private int timerId; //定时器Id

8 private long waitTime; //定时器等待时间9

10 //构造函数

11 publicTimer(){12 this.waitTime = 0;13 }14

15 //添加定时器

16 public int StartTimer(long interval, String expiryAction, intid){17 this.interval =interval;18 this.expiryAction =expiryAction;19 this.timerId =id;20 returntimerId;21 }22

23 //取消定时器

24 public void StopTimer(int timerId, ArrayListtimer){25 timer.remove(timerId);26 }27

28 //定时器检查

29 public voidPerTickBookkeeping(){30 if (this.interval > this.waitTime)31 this.waitTime += 10;32 else{33 System.out.println("定时器"+this.timerId+":"+this.expiryAction);34 this.waitTime = 0;35 }36 }37

38

39 public longgetInterval() {40 returninterval;41 }42 public void setInterval(longinterval) {43 this.interval =interval;44 }45 publicString getExpiryAction() {46 returnexpiryAction;47 }48 public voidsetExpiryAction(String expiryAction) {49 this.expiryAction =expiryAction;50 }51 public intgetTimerId() {52 returntimerId;53 }54 public void setTimerId(inttimerId) {55 this.timerId =timerId;56 }57 public longgetWaitTime() {58 returnwaitTime;59 }60 public void setWaitTime(longwaitTime) {61 this.waitTime =waitTime;62 }63 }

2)DoTimer.java:

1 importjava.util.ArrayList;2 importjava.util.Iterator;3

4 public class DoTimer extendsThread {5

6 private static ArrayListtimerList;7

8 public static voidmain(String[] args){9

10 timerList = new ArrayList();11 Timer timer1 = newTimer();12 timer1.StartTimer(3000, "我是第一个定时器,等待3秒", 0);13 Timer timer2 = newTimer();14 timer2.StartTimer(4000, "我是第二个定时器,等待4秒", 1);15 timerList.add(timer1);16 timerList.add(timer2);17

18 //public void run(){}

19 newThread(){20 @Override21 public voidrun() {22 while(true){23 Iterator it =timerList.iterator();24 while(it.hasNext()){25 it.next().PerTickBookkeeping();26 }27 try{28 sleep(10);29 } catch(InterruptedException e) {30 //TODO Auto-generated catch block

31 e.printStackTrace();32 }33 }34 }35 }.start();36 timer1.StopTimer(timer1.getTimerId(), timerList);37

38 }39 }

感谢各位提出改进意见,小李会选择更好的方法,改进自己的程序!

版权所有,允许转载,转载请注明出处,侵权必究!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值