scheduleAtFixedRate與scheduleWithFixedDelay區別

1、scheduleAtFixedRate 方法,顧名思義,它的方法名稱的意思是:已固定的頻率來執行某項計劃(任務)。
2、scheduleWithFixedDealy,相對固定的延遲後,執行某項計劃。

還是比較簡單明瞭的描述比較好:第一個方法是固定的頻率來執行某項計劃,它不受計劃執行時間的影響。到時間,它就執行。
而第二個方法,相對固定,據鄙人理解,是相對任務的。即無論某個任務執行多長時間,等執行完了,我再延遲指定的時間。也就是第二個方法,它受計劃執行時間的影響。

我再舉一個簡單的例子吧。
比方說:
某航空公司的航班:對於普通老百姓來說,不管你是在路上堵車了,還是正在跑呢,它是按時按點飛的。你的延誤耽誤不了飛機的起飛。這就是第一個方法。
但是對於某些...什麼什麼,是吧,沒到,他在小几那磨機,各種12s啊,什麼什麼的,灰機就會等,各種藉口等,噯,那個人登機了,好的,飛機就走你了。這就是第二個方法乾的事。
最簡單,最直接的就是來個demo,測試一下就知道了。jdk文檔中ScheduledExecutorService該類的描述中有個例子,來了改的。
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);

public void beepForAnHour() {
final Runnable beeper1 = new Runnable() {
public void run() {
// Thread.sleep(5*1000); 測試scheduleAtFixedRate方法時,放開此註釋,有異常,請撲獲
System.out.println("beep1"); }
};
final Runnable beeper2 = new Runnable() {
public void run() {
// Thread.sleep(5*1000); 測試scheduleWithFixedDelay方法時,放開此註釋,有異常,請撲獲
System.out.println("beep2"); }
};

final ScheduledFuture<?> beeperHandle1 =
scheduler.scheduleAtFixedRate(beeper1, 5, 5, SECONDS);
final ScheduledFuture<?> beeperHandle2 =
scheduler.scheduleAtFixedRate(beeper2, 5, 5, SECONDS);

scheduler.schedule(new Runnable() {
public void run() { beeperHandle1.cancel(true); }
}, 20, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle2.cancel(true); }
}, 20, SECONDS);
}
}
轉自http://hi.baidu.com/leige87/item/f4501cd8cdbb693c38f6f74b
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章