在Java中,setTimeout
通常用于在指定的時間后執行一個任務。然而,Java沒有內置的setTimeout
函數,但你可以使用ScheduledExecutorService
來實現類似的功能。要取消一個正在執行的任務,你可以使用Future.cancel()
方法。
以下是一個使用ScheduledExecutorService
和Future.cancel()
的示例:
import java.util.concurrent.*;
public class TimeoutExample {
public static void main(String[] args) {
// 創建一個單線程的計劃執行服務
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
// 提交一個任務并獲取一個Future對象
Future<?> future = executor.submit(() -> {
try {
System.out.println("任務開始執行...");
Thread.sleep(10000); // 模擬一個耗時任務
System.out.println("任務執行完成...");
} catch (InterruptedException e) {
System.out.println("任務被中斷...");
}
});
// 設置一個超時時間(單位:毫秒)
long timeout = 5000;
// 檢查任務是否在超時時間內完成
if (future.isDone()) {
System.out.println("任務在超時時間內完成...");
} else {
// 超時后取消任務
boolean isCancelled = future.cancel(true);
if (isCancelled) {
System.out.println("任務已取消...");
} else {
System.out.println("任務無法取消...");
}
}
// 關閉執行服務
executor.shutdown();
}
}
在這個示例中,我們創建了一個ScheduledExecutorService
并提交了一個任務。然后,我們設置了一個超時時間,并在超時后嘗試取消任務。如果任務成功取消,我們將看到"任務已取消…"的輸出。