空闲线程是什么意思?它什么时候发生? 上下文:ThreadPoolExecutor - 它表示即使有空闲线程,如果corePoolSize很小,也会创建一个新线程
答案 0 :(得分:3)
在这种情况下,空闲线程是由ThreadPoolExecutor拥有/持有的线程,当前没有运行任何Runnable / Callable。
当工作提交给TPE时,如果选择了空闲线程,则它变为活动状态并运行Runnable / Callable。一旦Runnable / Callable完成,线程就会回到空闲状态(但如果还有更多的工作需要,可能会立即再次激活,TPE选择使用现在可用的线程)。
答案 1 :(得分:2)
它只是意味着当ThreadPool没有任何要执行的任务或者具有比可用任务更多的活动线程时,多余的线程就会空闲。这意味着它们根本不可用于调度程序(也就是处于睡眠状态)。
答案 2 :(得分:2)
在线程池的上下文中,它意味着它已创建但未启动;正在等待工作开始。这意味着即使有多个线程而不是所需的作业,也可能会创建新线程,而不是在需要提交新作业但没有可用线程时达到这种情况。当然这达到了极限;这也取决于配置。
答案 3 :(得分:2)
空闲线程是什么意思?
空闲线程:如果没有运行任何任务,则工作线程处于空闲状态。
什么时候发生?
当一个线程完成执行当前任务或没有任何任务要运行时,它就会变为空闲状态。
corePoolSize: 至少保留这些可用于处理任务的许多线程。当corePoolSize线程空闲或未达到corePoolSize限制时,它减少了初始任务集的等待时间
核心和最大池大小:
ThreadPoolExecutor将根据corePoolSize(请参阅getCorePoolSize())和maximumPoolSize(请参阅getMaximumPoolSize())设置的边界自动调整池大小(请参阅getPoolSize())。当在方法execute(java.lang.Runnable)中提交新任务并且运行的线程少于corePoolSize时,即使其他工作线程处于空闲状态,也会创建一个新线程来处理该请求。如果有多个corePoolSize但运行的maximumPoolSize线程少于maximumPoolSize,则只有在队列已满时才会创建新线程。通过设置corePoolSize和maximumPoolSize,可以创建固定大小的线程池。通过将maximumPoolSize设置为基本无限制的值(如Integer.MAX_VALUE),可以允许池容纳任意数量的并发任务。最典型的情况是,核心和最大池大小仅在构造时设置,但也可以使用setCorePoolSize(int)和setMaximumPoolSize(int)动态更改。