首頁 >Java >java教程 >Java實作定時器功能的程式碼詳解

Java實作定時器功能的程式碼詳解

Y2J
Y2J原創
2017-05-17 09:19:391984瀏覽

這篇文章主要結合實例介紹了java當中的定時器的一些問題,有需要的朋友可以參考一下

定時器問題

  定時器屬於基本的基礎元件,不管是使用者空間的程式開發,還是核心空間的程式開發,很多時候都需要有定時器作為基礎元件的支援。定時器的實作需要具備以下四種基本行為:新增定時器、取消定時器、定時器檢查、到期執行。

  請設計一個計時器並實現以下三種基本行為,函數原型已給出,可使用任意程式語言設計資料結構及實現,並盡可能有效率地支援大量計時器:  

       // 新增計時器:經過特定時間間隔後執行目標操作

#  // 輸入1:Interval 計時器時間,單位ms

  // 輸入2:ExpiryAction 目標動作

##  // 回傳:定時器Id


  StartTimer(Interval, ExpiryAction)


  StartTimer(Interval, ExpiryAction)


  StartTimer(Interval, ExpiryAction)


  StartTimer(Interval, ExpiryAction)


  StartTimer(Interval, ExpiryAction) -> TimerId


  // 取消計時器


##  // 輸入:定時器Id


  StopTimer(TimerId)


  Stop

  // 定時器檢查

  // 系統每隔10ms 會呼叫一次此函數


  PerTickBookkeeping()

  PerTickBookkeeping()

  PerTickBookkeeping()  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){
  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);
 }
}
###【相關推薦】#######1. ######特別推薦######:### 「php程式設計師工具箱」V0.1版本下載#########2. ###Java免費影片教學#########3.###全面解析Java註解## ####

以上是Java實作定時器功能的程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn