在Java中,setTimeout
方法本身并不直接支持異常處理。但是,你可以使用ExecutorService
和Future
來實現類似的功能,并在其中處理異常。以下是一個示例:
import java.util.concurrent.*;
public class TimeoutExample {
public static void main(String[] args) {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<String> task = () -> {
// 模擬一個耗時任務
Thread.sleep(5000);
return "Task completed";
};
Future<String> future = executor.submit(task);
try {
// 設置超時時間,單位毫秒
String result = future.get(3, TimeUnit.SECONDS);
System.out.println("Result: " + result);
} catch (TimeoutException e) {
// 超時異常處理
System.out.println("Task timeout");
future.cancel(true); // 取消任務
} catch (InterruptedException | ExecutionException e) {
// 其他異常處理
System.out.println("Error: " + e.getMessage());
} finally {
executor.shutdown(); // 關閉線程池
}
}
}
在這個示例中,我們使用ExecutorService
提交一個耗時任務,并使用Future.get()
方法設置超時時間。如果任務在超時時間內未完成,將拋出TimeoutException
,我們可以捕獲并處理這個異常。同時,我們還可以捕獲其他可能的異常,如InterruptedException
和ExecutionException
。最后,不要忘記關閉ExecutorService
以釋放資源。