gpt4 book ai didi

java - ExecutorService什么时候回收可运行对象垃圾?

转载 作者:搜寻专家 更新时间:2023-10-31 20:32:29 24 4
gpt4 key购买 nike

我有一个可运行对象 A,它在实例化时与服务器交换心跳信号。我将 n 个这样的对象提交给一个固定线程池大小为 n 的执行程序服务。当 run 方法遇到异常时它会返回。对于给定的情况,我的所有线程都遇到异常并返回,但创建的对象仍然存在并继续交换心跳信号。我如何将这些对象标记为垃圾收集,以便它们停止心跳信号交换?

class A implements Runnable {
public void run(){
try{
\\throws error
} catch(Exception e){
\\returns
}
}

public static void main(){
ExecutorService executor = Executors.newFixedThreadPool(n)
for(i = 1 to n){
A a = new A()
executor.submit(a)
}
}
}

我应该在 main 的末尾调用 awaitTermination 并返回吗?

编辑:
换句话说,在所有线程返回后终止 executorservice 的一种方法是在 for 循环之后调用 shutdown() 并使用 Integer.MAX 长秒调用 awaitTermination,大约 70 年(这是我的时间限制不愿强加)。还有其他选择吗?

最佳答案

one way to terminate the executorservice after all the threads return would be to call shutdown() after the for loop and call awaitTermination with Integer.MAX long seconds which is roughly 70 years

正如文档所说,awaitTermination 方法将阻止 util:

  1. 所有任务在关闭请求后已完成执行
  2. 或者发生超时,
  3. 或者当前线程被中断,以先发生者为准


因此一旦三个事件中的一个出现,游戏就会结束,而不是必须等待 70 年。

关于java - ExecutorService什么时候回收可运行对象垃圾?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41443974/

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