Java世界

          學習筆記

          常用鏈接

          統計

          積分與排名

          天籟村

          新華網

          雅虎

          最新評論

          Timer和TimerTask【轉載】

          有時候需要每隔一段時間去執行某個任務,在Java中提供了Timer和TimerTask來完成這個任務,這個兩個類位于java.util包中。Timer類是Java中一種線程設施,用于安排以后在后臺線程中執行的任務,可以安排任務執行一次或定期重復執行。與每個Timer對象對應的是單個后臺線程,用于順序的執行所有計時器任務。

                對Timer對象最后的引用完成后,并且所有未處理的任務都已執行完畢后,計時器的任務執行線程會正常終止,并且成為垃圾回收的對象。但是這可能要很長時間后才能發生。默認情況下,任務執行線程并不作為守護線程來運行,所以它能夠阻止應用程序終止。如果調用者想要快速終止計時器的任務執行線程,那么請調用計時器的cancel方法。

                TimerTask對象由Timer安排為一次執行或重復執行的任務,也就是說,Timer負責計時,具體的任務由TimerTask來完成。

                以下用兩段程序來說明它們的用法。

           

          Example1:LOGO閃屏

               在游戲中,當游戲開始之前,會顯示一些Logo圖片,在顯示Logo圖片的同時,進行資源文件的加載。這種情形可以利用Timer來進行圖片的切換工作,先看看派生自TimerTask的具體的任務完成類EventTimerTask類源代碼:

          代碼
          import java.util.Timer;
          import java.util.TimerTask;

          class EventTimerTask extends TimerTask{   
              
          private int imageNum;
              
          private int imageCur = 0;   
              
          private Timer timer;   
              
              
          public void run(){   
                  
          //判斷當前顯示的圖片序號   
                  if(++imageCur<=imageNum){   
                      System.out.println(
          "當前屏幕上顯示的是第" + imageCur + "張圖片");   
                  }
          else{   
                      timer.cancel();   
                      System.out.println(
          "游戲資源加載完畢,開始進入游戲");   
                  }   
              }    

              
          public void setImageNum(int imageNum){   
                  
          this.imageNum = imageNum;   
              }   
                
              
          public void setTimer(Timer timer){   
                  
          this.timer = timer;   
              }  
          }   

           

           

          接下來是類ReadLogo代碼:


           

          代碼
          import java.util.Timer;   
          import java.util.TimerTask;   
            
          public class ReadLogo{   
              
          private Timer timer = new Timer();   
              
          private EventTimerTask timerTask = new EventTimerTask();   
              
          private int imageNum = 10;   
              
          private int delay = 1;   
              
          private int second = 2;   
              
              
          public void startTimerTask(){   
                  timerTask.setTimer(timer);   
                  timerTask.setImageNum(imageNum); 
                  timer.schedule(timerTask, delay
          *1000, second*1000);   
                  System.out.println(
          "加載其它游戲資源......");   
              }   
              
              
          public static void main(String[] args){   
                  ReadLogo rl 
          = new ReadLogo();   
                  rl.startTimerTask();   
              }   
          }
           

           

           

          程序運行結果:

          加載其它游戲資源......
          當前屏幕上顯示的是第1張圖片
          當前屏幕上顯示的是第2張圖片
          當前屏幕上顯示的是第3張圖片
          當前屏幕上顯示的是第4張圖片
          當前屏幕上顯示的是第5張圖片
          當前屏幕上顯示的是第6張圖片
          當前屏幕上顯示的是第7張圖片
          當前屏幕上顯示的是第8張圖片
          當前屏幕上顯示的是第9張圖片
          當前屏幕上顯示的是第10張圖片
          游戲資源加載完畢,開始進入游戲

           

           

           

          Example2:煮雞蛋計時程序

           

          代碼
          import java.util.Timer;
          import java.util.TimerTask;

          public class EggTask extends TimerTask {
              
          private Timer timer;
              
          public EggTask(Timer timer){
                  
          this.timer = timer;
              }
              
              
          public void run(){
                  playSound();
                  timer.cancel();
              }
              
              
          private void playSound(){
                  System.out.println(
          "雞蛋煮好了,播放聲音!~~~");
              }
          }

           

           

           

          代碼
          public class EggTimer {
              
          private final Timer timer = new Timer();
              
          private final int minutes;
              
          public EggTimer(int minutes){
                  
          this.minutes = minutes;
              }
              
              
          public void start(){
                  EggTask et 
          = new EggTask(timer);
                  
          //將任務和計時器關聯在一起。第一個參數是要執行的任務
                  
          //第二個參數是執行任務前的延遲時間,單位是毫秒
                  timer.schedule(et, minutes*60*1000);
              }
              
              
          public static void main(String[] args){
                  
          final int minutes = 2;
                  System.out.println(
          "煮雞蛋計時器開始記時,"+minutes+"分鐘后雞蛋煮熟會播放聲音!");
                  
                  EggTimer eggTimer 
          = new EggTimer(minutes);
                  eggTimer.start();
              }
          }
           

           


          程序運行結果:

          煮雞蛋計時器開始記時,2分鐘后雞蛋煮熟會播放聲音!
          雞蛋煮好了,播放聲音!
          ~~~

          posted on 2012-04-10 09:11 Rabbit 閱讀(306) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 巴彦淖尔市| 乌兰县| 牟定县| 利辛县| 屏南县| 中西区| 阳谷县| 故城县| 云南省| 万安县| 久治县| 二手房| 内黄县| 昌宁县| 乌什县| 澳门| 合水县| 敦化市| 衡东县| 扎赉特旗| 宝应县| 河间市| 永济市| 宁强县| 洱源县| 大余县| 无锡市| 定结县| 乡城县| 敦化市| 页游| 威海市| 北票市| 炉霍县| 石台县| 改则县| 上虞市| 金门县| 陆丰市| 丰原市| 芜湖市|