java(游戏开发)关于超时结束某方法的代码

在Java中,可以使用java.util.concurrent包中的ExecutorServiceFuture来实现超时结束某个方法的功能。下面是一个示例代码:

import java.util.concurrent.*;

public class TimeoutExample {
    public static void main(String[] args) {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        Callable<String> task = () -> {
            int i = 0;
            while (i < 1000) {
                if (i % 10 == 0) {
                    System.out.println(i + "是10的倍数");
                    Thread.sleep(1000);
                }
                i++;
            }
            // 在这里编写需要执行的方法逻辑
            // 如果方法执行时间超过指定的时间,会抛出TimeoutException

            // Thread.sleep(5000); // 模拟方法执行时间

            return "方法执行完成";
        };

        Future<String> future = executor.submit(task);

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

在上述代码中,我们通过ExecutorService创建了一个单线程的线程池,并定义了一个Callable任务。通过调用submit()方法将任务提交给线程池,并得到一个Future对象。然后,我们使用future.get(timeout, TimeUnit)方法设置超时时间,等待任务执行完成并获取返回结果。如果在指定的超时时间内任务未完成,则会抛出TimeoutException,此时我们可以进行相应的处理,如取消任务的执行。最后,记得调用executor.shutdown()关闭线程池。

这样,当方法执行时间超过指定的超时时间时,可以及时终止方法的执行。请根据实际需求调整超时时间和方法逻辑。

猜你喜欢

转载自blog.csdn.net/qq_53127029/article/details/132322293
今日推荐