Flask接口签名sign原理与实例代码浅析
229
2023-05-22
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.remove(timerId);
}
// 定时器检查
public void PerTickBookkeeping(){
if (this.interval > thiSQqVYwxlLVs.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 expiryActihttp://on;
}
public void setExpiryAction(String expiryAction) {
this.expiryAction = expiryAction;
}
public int getTimerId() {
return timerId;
}
public void setTimerId(int timSQqVYwxlLVerId) {
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
public static void main(String[] args){
timerList = new ArrayList
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
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);
}
}
希望本篇文章可以帮助到您
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~