java - Keep-alive 如何与 ThreadPoolExecutor 一起工作?

标签 java multithreading keep-alive

继续 question由我发布,我正在尝试使用 ThreadPoolExecutor在我的代码库中。即使在反复尝试从 Java API 文档中理解之后,我也无法清楚地理解要在构造函数中传递的 keepAliveTime 参数背后的功能/目的。希望有人可以用一些好的工作示例来解释我。

Java 文档节选:

public ThreadPoolExecutor(int corePoolSize,
                          int maximumPoolSize,
                          long keepAliveTime,
                          TimeUnit unit,
                          BlockingQueue<Runnable> workQueue)

keepAliveTime - 当线程数大于核心时,这是多余空闲线程的最大时间在终止之前等待新任务。

最佳答案

假设您的核心大小为 5,最大大小为 15。由于某种原因,您的池变得繁忙,并使用了所有 15 个可用线程。最终你没有工作要做 - 所以你的一些线程在完成他们的最终任务时变得空闲。因此允许其中 10 个线程死亡。

但是,为了避免它们被过快杀死,您可以指定保持 Activity 时间。因此,如果您将 1 指定为 keepAliveTime 值并将 TimeUnit.MINUTE 指定为 unit 值,则每个线程将在完成执行后等待一分钟一项任务,看看是否还有更多工作要做。如果它仍然没有得到任何更多的工作,它会让自己完成,直到池中只有 5 个线程 - 池的“核心”。

关于java - Keep-alive 如何与 ThreadPoolExecutor 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379314/

相关文章:

JavaFX 无法捕获编辑提交功能中的异常

c++ - std::thread 线程什么时候执行?

c++ - 从 if 语句中初始化 C++11 线程

apache - 多线程如何影响 http keep-alive 连接?

c++ - 使用 C++ recv winsocket2 保持 HTTP 事件

java - HIbernate 加载子类和类

java - Python "Event"等同于 Java?

java - 如何从证书颁发机构提供的 PEM 文件正确创建 java keystore 文件?

Java 线程不能与 JTextArea 一起正常工作

grails - 如何避免客户端防火墙关闭连接,因为在 Grails 上处理数据时不活动