温馨提示×

Java settimeout如何避免超时异常

小樊
93
2024-06-25 17:45:26
栏目: 编程语言

在Java中没有类似JavaScript中的setTimeout函数来设置超时时间。但是可以使用ExecutorService和Future来实现类似的功能,避免超时异常。

下面是一个示例代码:

import java.util.concurrent.*;

public class TimeoutExample {

    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Future<String> future = executor.submit(() -> {
            // 这里执行需要超时控制的任务
            try {
                Thread.sleep(5000); // 模拟一个长时间执行的任务
                return "Task completed";
            } catch (InterruptedException e) {
                return "Task interrupted";
            }
        });

        try {
            String result = future.get(3, TimeUnit.SECONDS); // 设置超时时间为3秒
            System.out.println(result);
        } catch (TimeoutException e) {
            future.cancel(true); // 超时时取消任务
            System.out.println("Task timed out");
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }

        executor.shutdown();
    }
}

在上面的示例中,通过ExecutorService的submit方法提交一个任务,然后使用future.get方法设置超时时间为3秒。如果任务在3秒内没有完成,将会抛出TimeoutException异常,并取消任务执行。如果任务在超时时间内完成,则会返回结果。

0