W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
java.lang.Object
|---java.util.Timer
public class Timer
extends Object
線程調(diào)度任務以供將來在后臺線程中執(zhí)行的工具。 任務可以安排為一次性執(zhí)行,或定期重復執(zhí)行。
對應于每個 Timer 對象的是單個后臺線程,用于按順序執(zhí)行所有計時器的任務。 定時器任務應該很快完成。 如果一個定時器任務花費了過多的時間來完成,它就會“占用”定時器的任務執(zhí)行線程。 反過來,這可以延遲后續(xù)任務的執(zhí)行,這些任務可能會在(如果)有問題的任務最終完成時“聚集”并快速連續(xù)執(zhí)行。
在對 Timer 對象的最后一個實時引用消失并且所有未完成的任務都已完成執(zhí)行后,計時器的任務執(zhí)行線程優(yōu)雅地終止(并成為垃圾回收的對象)。 但是,這可能需要任意長的時間才能發(fā)生。 默認情況下,任務執(zhí)行線程不作為守護線程運行,因此它能夠防止應用程序終止。 如果調(diào)用者想要快速終止定時器的任務執(zhí)行線程,調(diào)用者應該調(diào)用定時器的取消方法。
如果計時器的任務執(zhí)行線程意外終止,例如,因為調(diào)用了它的 stop 方法,那么任何進一步嘗試在計時器上安排任務都將導致 IllegalStateException,就像調(diào)用了計時器的取消方法一樣。
這個類是線程安全的:多個線程可以共享一個 Timer 對象而不需要外部同步。
此類不提供實時保證:它使用 Object.wait(long) 方法安排任務。
Java 5.0 引入了 java.util.concurrent 包,其中的并發(fā)實用程序之一是 ScheduledThreadPoolExecutor,它是一個線程池,用于以給定的速率或延遲重復執(zhí)行任務。 它實際上是 Timer/TimerTask 組合的更通用替代品,因為它允許多個服務線程,接受各種時間單位,并且不需要子類化 TimerTask(只需實現(xiàn) Runnable)。 使用一個線程配置 ScheduledThreadPoolExecutor 使其等效于 Timer。
實施說明:此類可擴展到大量并發(fā)計劃任務(數(shù)千個應該沒有問題)。 在內(nèi)部,它使用二進制堆來表示其任務隊列,因此調(diào)度任務的成本為 O(log n),其中 n 是并發(fā)調(diào)度的任務數(shù)。
實現(xiàn)說明:所有構(gòu)造函數(shù)都啟動一個計時器線程。
構(gòu)造函數(shù) | 描述 |
---|---|
Timer() | 創(chuàng)建一個新的計時器。 |
Timer(boolean isDaemon) | 創(chuàng)建一個新的計時器,其關聯(lián)線程可以指定給 Thread#setDaemon。 |
Timer(String name) | 創(chuàng)建一個新的計時器,其關聯(lián)線程具有指定的名稱。 |
Timer(String name, boolean isDaemon) | 創(chuàng)建一個新的計時器,其關聯(lián)線程具有指定的名稱,并且可以指定給 Thread#setDaemon。 |
修飾符和類型 | 方法 | 描述 |
---|---|---|
void | cancel() | 終止此計時器,丟棄任何當前計劃的任務。 |
int | purge() | 從此計時器的任務隊列中刪除所有已取消的任務。 |
void | schedule(TimerTask task, long delay) | 安排指定任務在指定延遲后執(zhí)行。 |
void | schedule(TimerTask task, long delay, long period) | 安排指定任務以重復固定延遲執(zhí)行,在指定延遲后開始。 |
void | schedule(TimerTask task, Date time) | 安排指定任務在指定時間執(zhí)行。 |
void | schedule(TimerTask task, Date firstTime, long period) | 從指定時間開始,安排指定任務以重復固定延遲執(zhí)行。 |
void | scheduleAtFixedRate(TimerTask task, long delay, long period) | 安排指定任務以重復固定速率執(zhí)行,在指定延遲后開始。 |
void | scheduleAtFixedRate(TimerTask task, Date firstTime, long period) | 從指定時間開始,安排指定任務以重復固定速率執(zhí)行。 |
從類 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
public Timer()
創(chuàng)建一個新的計時器。 關聯(lián)的線程沒有 Thread#setDaemon。
public Timer(boolean isDaemon)
創(chuàng)建一個新的計時器,其關聯(lián)線程可以指定給 Thread#setDaemon。 如果計時器將用于安排重復的“維護活動”,則調(diào)用守護線程,只要應用程序正在運行,就必須執(zhí)行該活動,但不應延長應用程序的生命周期。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
isDaemon | 如果關聯(lián)的線程應該作為守護進程運行,則為 true。 |
public Timer(String name)
創(chuàng)建一個新的計時器,其關聯(lián)線程具有指定的名稱。 關聯(lián)的線程沒有 Thread#setDaemon。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
name | 關聯(lián)線程的名稱 |
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果 name 為空 |
public Timer(String name, boolean isDaemon)
創(chuàng)建一個新的計時器,其關聯(lián)線程具有指定的名稱,并且可以指定給 Thread#setDaemon。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
name | 關聯(lián)線程的名稱 |
isDaemon | 如果關聯(lián)的線程應該作為守護進程運行,則為 true |
Throws:
Throw名稱 | Throw描述 |
---|---|
NullPointerException | 如果 name 為空 |
public void schedule(TimerTask task, long delay)
安排指定任務在指定延遲后執(zhí)行。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
task | 要安排的任務。 |
delay | 任務執(zhí)行前的延遲毫秒數(shù)。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果延遲為負,或延遲 + System.currentTimeMillis() 為負。 |
IllegalStateException | 如果任務已被安排或取消,定時器被取消,或定時器線程終止。 |
NullPointerException | 如果任務為空 |
public void schedule(TimerTask task, Date time)
安排指定任務在指定時間執(zhí)行。 如果時間是過去,則安排任務立即執(zhí)行。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
task | 要安排的任務。 |
time | 執(zhí)行任務的時間。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果 time.getTime() 是負數(shù)。 |
IllegalStateException | 如果任務已被安排或取消,定時器被取消,或定時器線程終止。 |
NullPointerException | 如果任務或時間為空 |
public void schedule(TimerTask task, long delay, long period)
安排指定任務以重復固定延遲執(zhí)行,在指定延遲后開始。 隨后的執(zhí)行以大約固定的時間間隔進行,間隔指定的時間段。
在固定延遲執(zhí)行中,每次執(zhí)行都是相對于前一次執(zhí)行的實際執(zhí)行時間安排的。 如果由于任何原因(例如垃圾收集或其他后臺活動)延遲執(zhí)行,則后續(xù)執(zhí)行也會延遲。 從長遠來看,執(zhí)行頻率一般會略低于指定周期的倒數(shù)(假設系統(tǒng)時鐘底層 Object.wait(long) 是準確的)。
固定延遲執(zhí)行適用于需要“順利”的重復活動。 換句話說,它適用于在短期內(nèi)保持頻率準確比在長期內(nèi)更重要的活動。 這包括大多數(shù)動畫任務,例如定期閃爍光標。 它還包括響應人工輸入執(zhí)行常規(guī)活動的任務,例如只要按住一個鍵就自動重復一個字符。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
task | 要安排的任務。 |
delay | 任務執(zhí)行前的延遲毫秒數(shù)。 |
period | 連續(xù)任務執(zhí)行之間的時間(以毫秒為單位)。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果延遲 < 0,或延遲 + System.currentTimeMillis() < 0,或周期 <= 0 |
IllegalStateException | 如果任務已被安排或取消,定時器被取消,或定時器線程終止。 |
NullPointerException | 如果任務為空 |
public void schedule(TimerTask task, Date firstTime, long period)
從指定時間開始,安排指定任務以重復固定延遲執(zhí)行。 隨后的執(zhí)行以大約固定的時間間隔進行,間隔指定的時間段。
在固定延遲執(zhí)行中,每次執(zhí)行都是相對于前一次執(zhí)行的實際執(zhí)行時間安排的。 如果由于任何原因(例如垃圾收集或其他后臺活動)延遲執(zhí)行,則后續(xù)執(zhí)行也會延遲。 從長遠來看,執(zhí)行頻率一般會略低于指定周期的倒數(shù)(假設系統(tǒng)時鐘底層 Object.wait(long) 是準確的)。 作為上述的結(jié)果,如果預定的第一次是過去的,則預定立即執(zhí)行。
固定延遲執(zhí)行適用于需要“順利”的重復活動。 換句話說,它適用于在短期內(nèi)保持頻率準確比在長期內(nèi)更重要的活動。 這包括大多數(shù)動畫任務,例如定期閃爍光標。 它還包括響應人工輸入執(zhí)行常規(guī)活動的任務,例如只要按住一個鍵就自動重復一個字符。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
task | 要安排的任務。 |
firstTime | 第一次執(zhí)行哪個任務。 |
period | 連續(xù)任務執(zhí)行之間的時間(以毫秒為單位)。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果 firstTime.getTime() < 0,或 period <= 0 |
IllegalStateException | 如果任務已被安排或取消,定時器被取消,或定時器線程終止。 |
NullPointerException | 如果 task 或 firstTime 為 null |
public void scheduleAtFixedRate(TimerTask task, long delay, long period)
安排指定任務以重復固定速率執(zhí)行,在指定延遲后開始。 隨后的執(zhí)行以大約固定的時間間隔進行,間隔指定的時間段。
在固定速率執(zhí)行中,每次執(zhí)行都是相對于初始執(zhí)行的計劃執(zhí)行時間安排的。 如果由于任何原因(例如垃圾收集或其他后臺活動)延遲了執(zhí)行,則會快速連續(xù)發(fā)生兩次或更多執(zhí)行以“趕上”。 從長遠來看,執(zhí)行頻率將恰好是指定周期的倒數(shù)(假設 Object.wait(long) 底層的系統(tǒng)時鐘是準確的)。
固定速率執(zhí)行適用于對絕對時間敏感的重復活動,例如每小時整點響鈴,或每天在特定時間運行定期維護。 它也適用于執(zhí)行固定執(zhí)行次數(shù)的總時間很重要的重復活動,例如每秒滴答一次、持續(xù) 10 秒的倒計時計時器。 最后,固定速率執(zhí)行適用于調(diào)度多個必須彼此保持同步的重復計時器任務。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
task | 要安排的任務。 |
delay | 任務執(zhí)行前的延遲毫秒數(shù)。 |
period | 連續(xù)任務執(zhí)行之間的時間(以毫秒為單位)。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果延遲 < 0,或延遲 + System.currentTimeMillis() < 0,或周期 <= 0 |
IllegalStateException | if task was already scheduled or cancelled, timer was cancelled, or timer thread terminated. |
NullPointerException | if task is null |
public void scheduleAtFixedRate(TimerTask task, Date firstTime, long period)
從指定時間開始,安排指定任務以重復固定速率執(zhí)行。 隨后的執(zhí)行以大約固定的時間間隔進行,間隔指定的時間段。
在固定速率執(zhí)行中,每次執(zhí)行都是相對于初始執(zhí)行的計劃執(zhí)行時間安排的。 如果由于任何原因(例如垃圾收集或其他后臺活動)延遲了執(zhí)行,則會快速連續(xù)發(fā)生兩次或更多執(zhí)行以“趕上”。 從長遠來看,執(zhí)行頻率將恰好是指定周期的倒數(shù)(假設 Object.wait(long) 底層的系統(tǒng)時鐘是準確的)。 由于上述原因,如果計劃的第一次是在過去,那么任何“錯過”的執(zhí)行都將被安排立即“趕上”執(zhí)行。
固定速率執(zhí)行適用于對絕對時間敏感的重復活動,例如每小時整點響鈴,或每天在特定時間運行定期維護。 它也適用于執(zhí)行固定執(zhí)行次數(shù)的總時間很重要的重復活動,例如每秒滴答一次、持續(xù) 10 秒的倒計時計時器。 最后,固定速率執(zhí)行適用于調(diào)度多個必須彼此保持同步的重復計時器任務。
參數(shù):
參數(shù)名稱 | 參數(shù)描述 |
---|---|
task | 要安排的任務。 |
firstTime | 第一次執(zhí)行哪個任務。 |
period | 連續(xù)任務執(zhí)行之間的時間(以毫秒為單位)。 |
Throws:
Throw名稱 | Throw描述 |
---|---|
IllegalArgumentException | 如果 firstTime.getTime() < 0 或 period <= 0 |
IllegalStateException | 如果任務已被安排或取消,定時器被取消,或定時器線程終止。 |
NullPointerException | 如果 task 或 firstTime 為 null |
public void cancel()
終止此計時器,丟棄任何當前計劃的任務。 不干擾當前正在執(zhí)行的任務(如果存在)。 一旦定時器被終止,它的執(zhí)行線程就會優(yōu)雅地終止,并且不能在其上安排更多的任務。
請注意,從由此計時器調(diào)用的計時器任務的 run 方法中調(diào)用此方法絕對保證正在進行的任務執(zhí)行是此計時器將執(zhí)行的最后一個任務執(zhí)行。
該方法可能會被重復調(diào)用; 第二次和后續(xù)調(diào)用無效。
public int purge()
從此計時器的任務隊列中刪除所有已取消的任務。 調(diào)用此方法對計時器的行為沒有影響,但會從隊列中消除對已取消任務的引用。 如果沒有對這些任務的外部引用,它們就有資格進行垃圾回收。
大多數(shù)程序不需要調(diào)用這個方法。 它專為取消大量任務的罕見應用程序而設計。 調(diào)用此方法是以時間換空間:該方法的運行時間可能與 n + c log n 成正比,其中 n 是隊列中的任務數(shù),c 是取消的任務數(shù)。
請注意,允許在此計時器上安排的任務中調(diào)用此方法。
返回:
從隊列中刪除的任務數(shù)。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: