Maison  >  Article  >  Java  >  Explication détaillée du code pour implémenter la fonction de minuterie en Java

Explication détaillée du code pour implémenter la fonction de minuterie en Java

Y2J
Y2Joriginal
2017-05-17 09:19:391963parcourir

Cet article présente principalement certains problèmes de minuteries en Java avec des exemples. Les amis dans le besoin peuvent se référer à

Problèmes de minuterie

Minuteries C'est un composant de base de base. Qu'il s'agisse de développement de programmes dans l'espace utilisateur ou dans l'espace noyau, les timers sont souvent nécessaires comme support en tant que composant de base. La mise en œuvre d'un minuteur doit avoir les quatre comportements de base suivants : ajout d'un minuteur, annulation du minuteur, vérification du minuteur et exécution de l'expiration.

Veuillez concevoir une minuterie et implémenter les trois comportements de base suivants. Le prototype de fonction a été donné. Vous pouvez utiliser n'importe quel langage de programmation pour concevoir les données. structure et implémentation. , et prendre en charge un grand nombre de minuteries aussi efficacement que possible :

// Ajouter une minuterie : effectuer l'opération cible après un intervalle de temps spécifique

// Entrée 1 : Durée de la minuterie d'intervalle, Unité ms

// Entrée 2 : Opération cible ExpiryAction

// Retour : Id de la minuterie

StartTimer (Intervalle, ExpiryAction) -> TimerId

// Annuler le minuteur

// Entrée : TimerId

StopTimer(TimerId)

  // Vérification de la minuterie

  // Le système appellera cette fonction toutes les 10 ms

 PerTickBookkeeping()

Sans plus attendre, passons directement au 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);
 }
}

【Recommandations associées】

1 Recommandation spéciale :Téléchargez la version V0.1 de "php Programmer Toolbox"

2 Tutoriel vidéo gratuit Java

3. analyse des annotations Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn