gpt4 book ai didi

java - 当 Future.get(timeout) 超时时线程是否继续运行

转载 作者:搜寻专家 更新时间:2023-11-01 01:38:31 27 4
gpt4 key购买 nike

如题所示,如果Future.get(timeout)超时,线程是否继续运行,

ExecutorService executor = Executors.newFixedThreadPool(n);
Callable<Object> task = new Callable<Object>() {
public Object call() {
//...
}
}
Future<Object> future = executor.submit(task);
try {
Object result = future.get(5, TimeUnit.SECONDS);
} catch (TimeoutException ex) {
// handle the timeout
}

如果线程继续运行并由于某些 IO 等原因而被阻塞,那么当线程池变满时,无法提交新任务,这意味着 trheadpool 被卡住了,因为池中的所有线程都被阻塞了,对吧?

最佳答案

对 future.get(..) 的调用将阻塞运行它的线程长达 5 秒。线程池执行的任务将不受影响,将继续运行直到优雅终止/异常/中断。

关于在线程池满容量时提交新任务,在您的情况下,任务将被提交(立即释放提交者线程),但会在线程池队列中等待执行。 API documentation of Executors.newFixedThreadPool(..)明确指出这一点。

关于java - 当 Future.get(timeout) 超时时线程是否继续运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4386196/

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