4

空闲线程是什么意思?什么时候发生?Context : ThreadPoolExecutor - 它说即使有空闲线程,如果 corePoolSize 很小,就会创建一个新线程

4

4 回答 4

3

在这种情况下,空闲线程是由 ThreadPoolExecutor 拥有/持有且当前未运行任何 Runnable/Callable 的线程。

当工作提交给 TPE 时,如果选择了空闲线程,则它会变为活动状态并运行 Runnable/Callable。一旦 Runnable/Callable 完成,线程就会回到空闲状态(但如果有更多工作要做并且 TPE 选择使用现在可用的线程,则可能会立即再次变为活动状态)。

于 2013-11-05T08:11:54.403 回答
2

空闲线程是什么意思?

空闲线程:工作线程是空闲的,如果它们没有运行任何任务。

什么时候发生?

当一个线程完成执行当前任务或没有任何任务要运行时,它变为空闲状态。

corePoolSize : 保持至少这么多线程可用于处理任务。当 corePoolSize 线程空闲或未达到 corePoolSize 限制时,它减少了初始任务集的等待时间

核心和最大池大小:

ThreadPoolExecutor 将根据 corePoolSize(请参阅 getCorePoolSize())和 maximumPoolSize(请参阅 getMaximumPoolSize())设置的边界自动调整池大小(请参阅 getPoolSize())。当在方法 execute(java.lang.Runnable) 中提交了一个新任务,并且运行的线程少于 corePoolSize 时,即使其他工作线程处于空闲状态,也会创建一个新线程来处理该请求。如果运行的线程数多于 corePoolSize 但少于 maximumPoolSize,则仅当队列已满时才会创建新线程。通过将 corePoolSize 和 maximumPoolSize 设置为相同,您可以创建一个固定大小的线程池。通过将 maximumPoolSize 设置为基本上无界的值,例如 Integer.MAX_VALUE,您允许池容纳任意数量的并发任务。最典型的是,

于 2013-11-05T08:21:13.983 回答
2

它只是意味着当 ThreadPool 没有任何要执行的任务或具有比可用任务更多的活动线程时,多余的线程将空闲。这意味着调度程序根本无法使用它们(也就是处于睡眠状态)。

于 2013-11-05T08:12:03.260 回答
2

好吧,在线程池的上下文中,这意味着它已创建但尚未启动;正在等待作业开始。这意味着即使线程多于所需的作业,也可能会创建新线程,而不是达到需要提交新作业但没有可用线程的情况。当然,这达到了极限;这也取决于配置。

于 2013-11-05T08:14:06.027 回答