この記事では主に Java におけるタイマーの問題を例とともに紹介します。必要な方は参考にしてください。
タイマーの問題
タイマーは、ユーザー空間のプログラム開発において、基本的なコンポーネントです。カーネル空間では、タイマーが基本コンポーネントとして必要になることがよくあります。タイマーの実装には、タイマーの追加、タイマーのキャンセル、タイマーのチェック、および期限切れの実行という 4 つの基本動作が必要です。
タイマーを設計し、次の 3 つの基本動作を実装してください。関数プロトタイプは、任意のプログラミング言語を使用してデータ構造と実装を設計し、可能な限り効率的に多数のタイマーをサポートできます。 // タイマーの追加 : 特定の時間間隔後にターゲット操作を実行します
// 入力 1: インターバルタイマー時間、単位は ms
// 入力 2: ExpiryAction ターゲット操作
// Return: タイマー ID
StartTimer(Interval, ExpiryAction) -> TimerId
// タイマーキャンセル
// 入力: TimerId
StopTimer(TimerId)
// タイマーチェック
/システム 10msごと この機能一度呼び出されます
PerTickBookkeeper()
早速、コードに直接行きましょう:
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;
}
}
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);
}
}
以上がJava タイマーの問題の分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。