溫馨提示×

Java settimeout如何避免超時(shí)異常

小樊
91
2024-06-25 17:45:26
欄目: 編程語言

在Java中沒有類似JavaScript中的setTimeout函數(shù)來設(shè)置超時(shí)時(shí)間。但是可以使用ExecutorService和Future來實(shí)現(xiàn)類似的功能,避免超時(shí)異常。

下面是一個(gè)示例代碼:

import java.util.concurrent.*;

public class TimeoutExample {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(() -> {
            // 這里執(zhí)行需要超時(shí)控制的任務(wù)
            try {
                Thread.sleep(5000); // 模擬一個(gè)長時(shí)間執(zhí)行的任務(wù)
                return "Task completed";
            } catch (InterruptedException e) {
                return "Task interrupted";
            }
        });

        try {
            String result = future.get(3, TimeUnit.SECONDS); // 設(shè)置超時(shí)時(shí)間為3秒
            System.out.println(result);
        } catch (TimeoutException e) {
            future.cancel(true); // 超時(shí)時(shí)取消任務(wù)
            System.out.println("Task timed out");
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        executor.shutdown();
    }
}

在上面的示例中,通過ExecutorService的submit方法提交一個(gè)任務(wù),然后使用future.get方法設(shè)置超時(shí)時(shí)間為3秒。如果任務(wù)在3秒內(nèi)沒有完成,將會拋出TimeoutException異常,并取消任務(wù)執(zhí)行。如果任務(wù)在超時(shí)時(shí)間內(nèi)完成,則會返回結(jié)果。

0