在Java中,使用ExecutorService
執行任務時,可以通過Future
對象的get
方法設置超時時間來處理任務超時。以下是一個簡單的示例:
import java.util.concurrent.*;
public class ExecutorServiceTimeoutExample {
public static void main(String[] args) {
// 創建一個固定大小的線程池
ExecutorService executorService = Executors.newFixedThreadPool(2);
// 提交任務并獲取Future對象
Future<?> future = executorService.submit(() -> {
try {
System.out.println("任務開始執行");
Thread.sleep(5000); // 模擬任務耗時5秒
System.out.println("任務執行完畢");
} catch (InterruptedException e) {
System.out.println("任務被中斷");
}
});
try {
// 設置超時時間為3秒
future.get(3, TimeUnit.SECONDS);
} catch (InterruptedException e) {
System.out.println("主線程被中斷");
future.cancel(true); // 取消任務
} catch (ExecutionException e) {
System.out.println("任務執行異常");
} catch (TimeoutException e) {
System.out.println("任務超時");
future.cancel(true); // 取消任務
} finally {
executorService.shutdown(); // 關閉線程池
}
}
}
在這個示例中,我們創建了一個固定大小的線程池,并提交了一個耗時5秒的任務。然后,我們使用future.get(3, TimeUnit.SECONDS)
設置了3秒的超時時間。如果任務在3秒內沒有完成,將拋出TimeoutException
異常,我們可以捕獲這個異常并取消任務。最后,記得關閉線程池。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。