Java定时器问题实例解析

网友投稿 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){

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 timerList;

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 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);

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:详解Vue2.0之去掉组件click事件的native修饰
下一篇:Java关键字finally_动力节点Java学院整理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~