gpt4 book ai didi

java - Android:执行一个方法并在超时后终止它

转载 作者:行者123 更新时间:2023-12-01 09:47:25 28 4
gpt4 key购买 nike

我需要执行 Java 方法最多 X 秒。如果该方法的代码在 X 秒后没有终止,我需要继续执行。

我尝试使用以下代码(使用 ExecutorService 类)。

private void execLoop(){
ExecutorService executor = Executors.newSingleThreadExecutor();
int iteration;
for(iteration=0;iteration<10;iteration++) {
CallableTask ct = new CallableTask();
Future<String> future = executor.submit(ct);
try {
future.get(5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (TimeoutException e) {
e.printStackTrace();
}
}
}
class CallableTask implements Callable {
@Override
public Object call() throws Exception {
Log.d("TIME","executed!");
int t=0;
boolean c = true;
while(c){
t+=0; // infinite loop: this method will never terminate
}
return null;
}
}

我对这段代码的期望是每 5 秒向 logcat 打印一次字符串“executed!” 10次​​。然而,执行陷入了无限循环。

最佳答案

首先,你永远不会关闭你的执行器。添加以下行作为 execLoop() 方法中的最后一条语句:

executor.shutdownNow();

然后,由于关闭是通过中断线程来完成的,因此您需要确保您的 CallableTask 监听中断。一种方法是使用 Thread.sleep() 代替 t+=0:

while(c){
Thread.sleep(500); // This will be interrupted when you call shutdownNow()
}

关于java - Android:执行一个方法并在超时后终止它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37874195/

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