gpt4 book ai didi

java - java.util.concurrent.ExecutorService 是否应该像 java.sql.Connection 一样关闭?

转载 作者:行者123 更新时间:2023-12-02 07:21:40 26 4
gpt4 key购买 nike

我怀疑在所有任务完成或取消后是否应该关闭java.util.concurrent.ExecutorService

我有一个这样的方法:

public void testProxies() {

// 5 thread
ExecutorService exec = Executors.newFixedThreadPool(5);

try {
while(condition){
exec.execute(new Runnable() {
@Override
public void run() {
//some task
}
});
}
} catch (Exception e) {
e.printStackTrace();
} finally {
exec.shutdown();// should be shutdown here?
}
}

这是使用ExecutorService的正确方法吗?

如何重用ExecutorService

ExecutorService 应该关闭还是放开它?

最佳答案

  • 如果您将其关闭,则无法重复使用它。
  • 如果不关闭它,您的程序将无法退出,因为会有 Activity 的非守护线程。

因此,您需要在某个阶段调用 shutdown 让程序退出,但前提是您知道不需要向执行器提交额外的任务。

我通常做什么:

  • 我将 ExecutorService 作为我的类的一个字段
  • 我提供了一个 stopshutdown 方法,我的类的用户需要调用该方法来调用执行器的 shutdown 方法。请注意,在所有提交的任务完成(或已成功取消)之前,执行器不会真正关闭。

另一种方法是添加一个关闭钩子(Hook),它将在 JVM 退出时关闭您的执行器。

关于java - java.util.concurrent.ExecutorService 是否应该像 java.sql.Connection 一样关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14133666/

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