Java--定時器問題,java--定時器

來源:互聯網
上載者:User

Java--定時器問題,java--定時器
定時器問題

  定時器屬於基本的基礎組件,不管是使用者空間的程式開發,還是核心空間的程式開發,很多時候都需要有定時器作為基礎組件的支援。一個定時器的實現需要具備以下四種基本行為:添加定時器、取消定時器、定時器檢查、到期執行。
  請設計一個定時器並實現以下三種基本行為,函數原型已給出,可使用任意程式設計語言設計資料結構及實現,並儘可能高效地支援大量定時器:
  // 添加定時器:經過特定時間間隔後執行目標操作
  // 輸入 1:Interval 定時器時間,單位ms
  // 輸入 2:ExpiryAction 目標操作
  // 返回:定時器 Id
  StartTimer(Interval, ExpiryAction) -> TimerId
  // 取消定時器
  // 輸入:定時器 Id
  StopTimer(TimerId)
  // 定時器檢查
  // 系統每隔 10ms 會調用一次該函數
  PerTickBookkeeping()

  話不多說,直接上代碼:

  1)Timer.java:

 1 import java.util.ArrayList; 2  3 public class Timer { 4  5     private long interval;  // 定時器時間,單位 ms 6     private String expiryAction;  // 目標操作 7     private int timerId;  // 定時器Id 8     private long waitTime;  // 定時器等待時間 9     10     // 建構函式11     public Timer(){12         this.waitTime = 0;13     }14     15     // 添加定時器16     public int StartTimer(long interval, String expiryAction, int id){17         this.interval = interval;18         this.expiryAction = expiryAction;19         this.timerId = id;20         return timerId;21     }22     23     // 取消定時器24     public void StopTimer(int timerId, ArrayList<Timer> timer){25         timer.remove(timerId);26     }27     28     // 定時器檢查29     public void PerTickBookkeeping(){30         if (this.interval > this.waitTime)31             this.waitTime += 10;32         else{33             System.out.println("定時器"+this.timerId+":"+this.expiryAction);34             this.waitTime = 0;35         }36     }37     38     39     public long getInterval() {40         return interval;41     }42     public void setInterval(long interval) {43         this.interval = interval;44     }45     public String getExpiryAction() {46         return expiryAction;47     }48     public void setExpiryAction(String expiryAction) {49         this.expiryAction = expiryAction;50     }51     public int getTimerId() {52         return timerId;53     }54     public void setTimerId(int timerId) {55         this.timerId = timerId;56     }57     public long getWaitTime() {58         return waitTime;59     }60     public void setWaitTime(long waitTime) {61         this.waitTime = waitTime;62     }63 }

  2)DoTimer.java:

 1 import java.util.ArrayList; 2 import java.util.Iterator; 3  4 public class DoTimer extends Thread { 5  6     private static ArrayList<Timer> timerList; 7      8     public static void main(String[] args){ 9         10         timerList = new ArrayList<Timer>();11         Timer timer1 = new Timer();12         timer1.StartTimer(3000, "我是第一個定時器,等待3秒", 0);13         Timer timer2 = new Timer();14         timer2.StartTimer(4000, "我是第二個定時器,等待4秒", 1);15         timerList.add(timer1);16         timerList.add(timer2);17         18         //public void run(){}19         new Thread(){20             @Override21             public void run() {22                 while(true){23                     Iterator<Timer> it = timerList.iterator();24                     while(it.hasNext()){25                         it.next().PerTickBookkeeping();26                     }27                     try {28                         sleep(10);29                     } catch (InterruptedException e) {30                         // TODO Auto-generated catch block31                         e.printStackTrace();32                     }33                 }34             }35         }.start();36         timer1.StopTimer(timer1.getTimerId(), timerList);37         38     }39 }

  感謝各位提出改進意見,小李會選擇更好的方法,改進自己的程式!

  

  著作權,允許轉載,轉載請註明出處,侵權必究!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.