gpt4 book ai didi

java - 一段时间后彻底杀死 future

转载 作者:行者123 更新时间:2023-11-30 02:00:20 26 4
gpt4 key购买 nike

我有一个 future ,可以完成一些密集的任务。我称其为带有超时的 future 。如果超时,我会向客户端抛出异常,并创建另一个 scheduledfuture 以在一段时间后最终取消第一个 future 。这个想法是在初始超时后给 future 一段时间来完成其任务,但如果它在这段时间内没有完成,就杀死它。

我的代码看起来像

try {
return future.get(5, TimeUnit.SECONDS);
} catch (TimeoutException) {
//create a scheduledfuture here which waits for another 5s
// and kill the above future is it is still not done
//the callable of scheduledfuture looks like -
/*
if (!future.isDone()) {
future.cancel(true);
}
*/
}

现在有两个问题 -
1. future.cancel(true) 只会将中断标志设置为 true。它不会按原样结束任务。我该如何结束任务?内部是否有一个 JVM 进程检查线程是否有中断标志,如果为真则终止它们?
2. 由于现在设置了中断标志,那么任务完成后,是否有一个进程重置该标志?否则,当通过 ExecutorService 管理的线程尝试处理下一个包含阻塞调用的请求时,它将会失败,并出现 InterruptedException

最佳答案

How should I end the task?

运行任务是一个单独的进程,杀死该进程即可停止它。 Java 中没有安全的方法来停止线程,除非任务已编码为支持它。

As the interrupted flag is now set after the task completes, is there a process that resets the flag?

是的,ExecutorService 会重置中断标志。

关于java - 一段时间后彻底杀死 future ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53092262/

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