继续 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/