在 Java 中排程重複固定延遲執行的任務
在固定延遲執行中,每次執行都是相對於前一次執行的原始執行時間進行排程的。如果由於某種原因(例如垃圾回收)導致執行延遲,則後續執行也將延遲。
可以透過兩種方式排程重複固定延遲執行的任務:如下所示:
在指定時間排程重複固定延遲執行的任務
在指定延遲後排程重複固定延遲執行的任務
在指定時間排程重複固定延遲執行的任務
`void schedule(TimerTask task, Date firstTime, long period)` 方法用於排程重複固定延遲執行的任務,從指定時間開始。
**宣告** − `java.util.Timer.schedule(TimerTask task, Date firstTime, long period)` 的宣告如下:
public void schedule(TimerTask task, Date firstTime, long period)
這裡,`task` 是要排程的任務,`firstTime` 是任務第一次執行的時間,`period` 是連續任務執行之間的時間間隔(毫秒)。
`schedule(Timertask task, Date firstTime, long period)` 方法會丟擲一些異常,如下所示:
| IllegalArgumentException | 如果 `firstTime.getTime()` 為負數或 `period` <= 0,則丟擲此異常。 |
| IllegalStateException | 如果任務已預先排程或取消,計時器已取消,或計時器執行緒已終止,則丟擲此異常。 |
| NullPointerException | 如果 `task` 為空,則丟擲此異常。 |
讓我們來看一個示例,演示如何在 Java 中排程任務以從指定時間開始重複固定延遲執行:
示例
import java.util.*;
class MyTask extends TimerTask {
public void run() {
System.out.println("Task is running");
}
}
public class Example {
public static void main(String[] args) {
Timer timer = new Timer(); // creating timer
TimerTask task = new MyTask(); // creating timer task
timer.scheduleAtFixedRate(task,new Date(),2000);
// scheduling the task at the specified time at fixed-delay
}
}輸出
Task is running Task is running Task is running Task is running Task is running
在指定延遲後排程重複固定延遲執行的任務
`void schedule(TimerTask task, long delay, long period)` 方法用於排程重複固定延遲執行的任務,從指定的延遲後開始。
**宣告** − `java.util.Timer.schedule(TimerTask task, long delay, long period)` 的宣告如下:
public void schedule(TimerTask task, long delay, long period)
這裡,`task` 是要排程的任務,`delay` 是任務執行前的延遲時間(毫秒),`period` 是連續任務執行之間的時間間隔(毫秒)。
這裡,`task` 是要排程的任務,`firstTime` 是任務第一次執行的時間,`period` 是連續任務執行之間的時間間隔(毫秒)。
`schedule(Timertask task, long delay, long period)` 方法會丟擲一些異常,如下所示:
| **IllegalArgumentException** | 如果 `firstTime.getTime()` 為負數或 `period` <= 0,則丟擲此異常。 |
| IllegalStateException | 如果任務已預先排程或取消,計時器已取消,或計時器執行緒已終止,則丟擲此異常。 |
| NullPointerException | 如果 `task` 為空,則丟擲此異常。 |
讓我們來看一個程式,演示如何使用 `void schedule(TimerTask task, long delay, long period)` 方法:
示例
import java.util.*;
class MyTask extends TimerTask {
public void run() {
System.out.println("Task is running");
}
}
public class Example {
public static void main(String[] args) {
Timer timer = new Timer(); // creating timer
TimerTask task = new MyTask(); // creating timer task
// scheduling the task for repeated fixed-delay execution, beginning after the specified delay
timer.schedule(task, 800, 1000);
}
}輸出
Task is running Task is running Task is running Task is running Task is running Task is running Task is running Task is running Task is running Task is running
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP