gpt4 book ai didi

java - 在 Java 中为方法创建超时的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-29 06:13:52 25 4
gpt4 key购买 nike

我想在 x 秒后停止该方法。我该怎么做 ?

编辑
我会详细说明:我的 method() 是 native 的或与其他服务器通信。
我不在循环中(因此我不能更改标志)如果方法存在,我将要使用该方法的返回值。

最佳答案

这在很大程度上取决于您的方法在做什么。最简单的方法是定期检查该方法执行了多长时间,并在超过限制时返回。

long t0 = System.currentTimeMillis();
// do something
long t1 = System.currentTimeMillis();
if (t1-t0 > x*1000) {
return;
}

如果你想在一个单独的线程中运行这个方法,那么你可以这样做:

public <T> T myMethod() {
ExecutorService executor = Executors.newSingleThreadExecutor();
try {
try {
T value = executor.invokeAny(Collections.singleton(new Callable<T>() {
@Override
public T call() throws Exception {
//your actual method code here
return null;
}
}), 3, TimeUnit.SECONDS);
System.out.println("All went fine");
return value;
} catch (TimeoutException e) {
System.out.println("Exceeded time limit, interrupted");
} catch (Exception e) {
System.out.println("Some error happened, handle it properly");
}
return null; /*some default value*/
} finally {
executor.shutdownNow();
}
}

请注意,如果你在线程中做一些不可中断的IO,这个方法将不起作用..

关于java - 在 Java 中为方法创建超时的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5800296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com