JavaTM 2 Platform
Standard Ed. 6

java.util
類別 Timer

java.lang.Object
  繼承者 java.util.Timer

public class Timer
extends Object

一種工具,執行緒用其安排以後在後台執行緒中執行的任務。可安排任務執行一次,或者定期重複執行。

與每個 Timer 物件相對應的是單個後台執行緒,用於順序地執行所有計時器任務。計時器任務應該迅速完成。如果完成某個計時器任務的時間太長,那麼它會「獨佔」計時器的任務執行執行緒。因此,這就可能延遲後續任務的執行,而這些任務就可能「堆積(heap)空間在一起」,並且在上述不友好的任務最終完成時才能夠被快速連續地執行。

Timer 物件最後的參考完成後,並且 所有未處理的任務都已執行完成後,計時器的任務執行執行緒會正常終止(並且成為垃圾回收的物件)。但是這可能要很長時間後才發生。預設情況下,任務執行執行緒並不作為守護執行緒 來運行,所以它能夠阻止應用程序終止。如果調用者想要快速終止計時器的任務執行執行緒,那麼調用者應該調用計時器的 cancel 方法。

如果意外終止了計時器的任務執行執行緒,例如調用了它的 stop 方法,那麼所有以後對該計時器安排任務的嘗試都將導致 IllegalStateException,就好像調用了計時器的 cancel 方法一樣。

此類別是執行緒安全的:多個執行緒可以共享單個 Timer 物件而無需進行外部同步。

此類別 提供實時保證:它使用 Object.wait(long) 方法來安排任務。

實作注意事項:此類別可擴展到大量同時安排的任務(存在數千個都沒有問題)。在內部,它使用二進制堆積(heap)空間來表示其任務佇列,所以安排任務的開銷是 O(log n),其中 n 是同時安排的任務數。

實作注意事項:所有建構子都啟動計時器執行緒。

從以下版本開始:
1.3
另請參見:
TimerTask, Object.wait(long)

建構子摘要
Timer()
          創建一個新計時器。
Timer(boolean isDaemon)
          創建一個新計時器,可以指定其相關的執行緒作為守護程序運行。
Timer(String name)
          創建一個新計時器,其相關的執行緒具有指定的名稱。
Timer(String name, boolean isDaemon)
          創建一個新計時器,其相關的執行緒具有指定的名稱,並且可以指定作為守護程序運行。
 
方法摘要
 void cancel()
          終止此計時器,丟棄所有當前已安排的任務。
 int purge()
          從此計時器的任務佇列中移除所有已取消的任務。
 void schedule(TimerTask task, Date time)
          安排在指定的時間執行指定的任務。
 void schedule(TimerTask task, Date firstTime, long period)
          安排指定的任務在指定的時間開始進行重複的固定延遲執行
 void schedule(TimerTask task, long delay)
          安排在指定延遲後執行指定的任務。
 void schedule(TimerTask task, long delay, long period)
          安排指定的任務從指定的延遲後開始進行重複的固定延遲執行
 void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
          安排指定的任務在指定的時間開始進行重複的固定速率執行
 void scheduleAtFixedRate(TimerTask task, long delay, long period)
          安排指定的任務在指定的延遲後開始進行重複的固定速率執行
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

Timer

public Timer()
創建一個新計時器。相關的執行緒 作為守護程序運行。

另請參見:
Thread, cancel()

Timer

public Timer(boolean isDaemon)
創建一個新計時器,可以指定其相關的執行緒作為守護程序運行。如果計時器將用於安排重複的「維護活動」,則調用守護執行緒,在應用程序運行期間必須調用守護執行緒,但是該操作不應延長程序的生命週期。

參數:
isDaemon - 如果應該將相關的執行緒作為守護程序運行,則為 true。
另請參見:
Thread, cancel()

Timer

public Timer(String name)
創建一個新計時器,其相關的執行緒具有指定的名稱。相關的執行緒 作為守護程序運行。

參數:
name - 相關執行緒的名稱。
拋出:
NullPointerException - 如果 name 為 null。
從以下版本開始:
1.5
另請參見:
Thread.getName(), Thread.isDaemon()

Timer

public Timer(String name,
             boolean isDaemon)
創建一個新計時器,其相關的執行緒具有指定的名稱,並且可以指定作為守護程序運行。

參數:
name - 相關執行緒的名稱。
isDaemon - 如果應該將相關的執行緒作為守護程序運行,則為 true。
拋出:
NullPointerException - 如果 name 為 null。
從以下版本開始:
1.5
另請參見:
Thread.getName(), Thread.isDaemon()
方法詳細資訊

schedule

public void schedule(TimerTask task,
                     long delay)
安排在指定延遲後執行指定的任務。

參數:
task - 所要安排的任務。
delay - 執行任務前的延遲時間,單位是毫秒。
拋出:
IllegalArgumentException - 如果 delay 是負數,或者 delay + System.currentTimeMillis() 是負數。
IllegalStateException - 如果已經安排或取消了任務,或者已經取消計時器。

schedule

public void schedule(TimerTask task,
                     Date time)
安排在指定的時間執行指定的任務。如果此時間已過去,則安排立即執行該任務。

參數:
task - 所要安排的任務。
time - 執行任務的時間。
拋出:
IllegalArgumentException - 如果 time.getTime() 是負數。
IllegalStateException - 如果已經安排或取消了任務,已經取消了計時器,或者計時器執行緒已終止。

schedule

public void schedule(TimerTask task,
                     long delay,
                     long period)
安排指定的任務從指定的延遲後開始進行重複的固定延遲執行。以近似固定的時間間隔(由指定的週期分隔)進行後續執行。

在固定延遲執行中,根據前一次執行的實際執行時間來安排每次執行。如果由於任何原因(如垃圾回收或其他後台活動)而延遲了某次執行,則後續執行也將被延遲。從長期來看,執行的頻率一般要稍慢於指定週期的倒數(假定 Object.wait(long) 所依靠的系統時鐘是準確的)。

固定延遲執行適用於那些需要「平穩」運行的重複活動。換句話說,它適用於在短期運行中保持頻率準確要比在長期運行中更為重要的活動。這包括大多數動畫任務,如以固定時間間隔閃爍的鼠標。這還包括為回應人類別活動所執行的固定活動,如在按住鍵時自動重複輸入字元。

參數:
task - 所要安排的任務。
delay - 執行任務前的延遲時間,單位是毫秒。
period - 執行各後續任務之間的時間間隔,單位是毫秒。
拋出:
IllegalArgumentException - 如果 delay 是負數,或者 delay + System.currentTimeMillis() 是負數。
IllegalStateException - 如果已經安排或取消了任務,已經取消了計時器,或者計時器執行緒已終止。

schedule

public void schedule(TimerTask task,
                     Date firstTime,
                     long period)
安排指定的任務在指定的時間開始進行重複的固定延遲執行。以近似固定的時間間隔(由指定的週期分隔)進行後續執行。

在固定延遲執行中,根據前一次執行的實際執行時間來安排每次執行。如果由於任何原因(如垃圾回收或其他後台活動)而延遲了某次執行,則後續執行也將被延遲。在長期運行中,執行的頻率一般要稍慢於指定週期的倒數(假定 Object.wait(long) 所依靠的系統時鐘是準確的)。

固定延遲執行適用於那些需要「平穩」運行的重複執行活動。換句話說,它適用於在短期運行中保持頻率準確要比在長期運行中更為重要的活動。這包括大多數動畫任務,如以固定時間間隔閃爍的鼠標。這還包括為回應人類別活動所執行的固定活動,如在按住鍵時自動重複輸入字元。

參數:
task - 所要安排的任務。
firstTime - 首次執行任務的時間。
period - 執行各後續任務之間的時間間隔,單位是毫秒。
拋出:
IllegalArgumentException - 如果 time.getTime() 是負數。
IllegalStateException - 如果已經安排或取消了任務,已經取消了計時器,或者計時器執行緒已終止。

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask task,
                                long delay,
                                long period)
安排指定的任務在指定的延遲後開始進行重複的固定速率執行。以近似固定的時間間隔(由指定的週期分隔)進行後續執行。

在固定速率執行中,根據已安排的初始執行時間來安排每次執行。如果由於任何原因(如垃圾回收或其他後台活動)而延遲了某次執行,則將快速連續地出現兩次或更多的執行,從而使後續執行能夠「追趕上來」。從長遠來看,執行的頻率將正好是指定週期的倒數(假定 Object.wait(long) 所依靠的系統時鐘是準確的)。

固定速率執行適用於那些對絕對 時間敏感的重複執行活動,如每小時准點打鍾報時,或者在每天的特定時間運行已安排的維護活動。它還適用於那些完成固定次數執行的總計時間很重要的重複活動,如倒計時的計時器,每秒鐘滴答一次,共 10 秒鐘。最後,固定速率執行適用於安排多個重複執行的計時器任務,這些任務相互之間必須保持同步。

參數:
task - 所要安排的任務。
delay - 執行任務前的延遲時間,單位是毫秒。
period - 執行各後續任務之間的時間間隔,單位是毫秒。
拋出:
IllegalArgumentException - 如果 delay 是負數,或者 delay + System.currentTimeMillis() 是負數。
IllegalStateException - 如果已經安排或取消了任務,已經取消了計時器,或者計時器執行緒已終止。

scheduleAtFixedRate

public void scheduleAtFixedRate(TimerTask task,
                                Date firstTime,
                                long period)
安排指定的任務在指定的時間開始進行重複的固定速率執行。以近似固定的時間間隔(由指定的週期分隔)進行後續執行。

在固定速率執行中,相對於已安排的初始執行時間來安排每次執行。如果由於任何原因(如垃圾回收或其他後台活動)而延遲了某次執行,則將快速連續地出現兩次或更多次執行,從而使後續執行能夠趕上來。從長遠來看,執行的頻率將正好是指定週期的倒數(假定 Object.wait(long) 所依靠的系統時鐘是準確的)。

固定速率執行適用於那些對絕對 時間敏感的重複執行活動,如每小時准點打鍾報時,或者在每天的特定時間運行已安排的維護活動。它還適用於那些完成固定次數執行的總計時間很重要的重複活動,如倒計時的計時器,每秒鐘滴答一次,共 10 秒鐘。最後,固定速率執行適用於安排多次重複執行的計時器任務,這些任務相互之間必須保持同步。

參數:
task - 所要安排的任務。
firstTime - 首次執行任務的時間。
period - 執行各後續任務之間的時間間隔,單位是毫秒。
拋出:
IllegalArgumentException - 如果 time.getTime() 是負數。
IllegalStateException - 如果已經安排或取消了任務,已經取消了計時器,或者計時器執行緒已終止。

cancel

public void cancel()
終止此計時器,丟棄所有當前已安排的任務。這不會干擾當前正在執行的任務(如果存在)。一旦終止了計時器,那麼它的執行執行緒也會終止,並且無法根據它安排更多的任務。

注意,在此計時器調用的計時器任務的 run 方法內調用此方法,就可以絕對確保正在執行的任務是此計時器所執行的最後一個任務。

可以重複調用此方法;但是第二次和後續調用無效。


purge

public int purge()
從此計時器的任務佇列中移除所有已取消的任務。調用此方法對計時器的行為沒有影響,但是將無法參考佇列中已取消的任務。如果沒有對這些任務的外部參考,則它們就成為垃圾回收的合格物件。

多數程序無需調用此方法。它設計用於一些罕見的應用程序,這些程序可取消大量的任務。調用此方法要以時間來換取空間:此方法的運行時可能與 n + c log n 呈正比,其中 n 是佇列中的任務數,而 c 是取消的任務數。

注意,從此計時器上所安排的任務中調用此方法是允許的。

返回:
從佇列中移除的任務數。
從以下版本開始:
1.5

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only