Heim  >  Artikel  >  Java  >  Beispielanalyse von Java-Timer-Problemen

Beispielanalyse von Java-Timer-Problemen

Y2J
Y2JOriginal
2017-05-02 14:18:401284Durchsuche

In diesem Artikel werden hauptsächlich einige Probleme mit Timern in Java anhand von Beispielen vorgestellt. Freunde in Not können sich auf

Timer-Probleme

beziehen. Timer Es handelt sich um eine grundlegende Grundkomponente. Unabhängig davon, ob es sich um die Programmentwicklung im Userspace oder im Kernelspace handelt, werden Timer häufig als Basiskomponente zur Unterstützung benötigt. Die Implementierung eines Timers muss die folgenden vier grundlegenden Verhaltensweisen aufweisen: Timer hinzufügen, Timer abbrechen, Timer prüfen und Ablaufausführung ausführen.

Bitte entwerfen Sie einen Timer und implementieren Sie die folgenden drei grundlegenden Verhaltensweisen. Sie können jede Programmiersprache verwenden, um die Datenstruktur und Implementierung zu entwerfen und eine große Anzahl von Timern zu unterstützen möglichst effizient:

// Timer hinzufügen: Zieloperation nach einem bestimmten Zeitintervall ausführen

// Eingabe 1: Intervall-Timer-Zeit, Einheit ms

/ Eingabe 2: ExpiryAction-Zieloperation

// Rückgabe: TimerId

StartTimer(Interval, ExpiryAction) -> TimerId

// Timer abbrechen

// Eingabe: Timer-ID

StopTimer(TimerId)

// Timer-Überprüfung

// Das System ruft diese Funktion alle 10 ms auf

PerTickBookkeeping()

Kommen wir ohne weitere Umschweife direkt zum Code:

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

Das obige ist der detaillierte Inhalt vonBeispielanalyse von Java-Timer-Problemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn