ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

10.线程池状态和线程周期

2022-03-28 17:04:06  阅读:193  来源: 互联网

标签:10 周期 状态 队列 shoudown running 任务 线程


 

线程池状态及生命周期

 

 

 

 

 

线程池在其生命周期中会经历多种状态,这些状态被定义在threadPoolExecutor中,一共有5种。

 

 

 

这些状态所对应的描述如图所示,

 

 

 

下面几小节将介绍这些状态。

 

 

 

首先来看第一个状态,running,他表示线程池正在运行,

 

 

 

可以接受新任务,并且也能处理任务队列中的任务,下面动画演示running状态。

这是一个正在运行的线程池。

 

 

 

其中有4个正在执行任务的线程,任务队列中还有2个未执行的任务,队列还有空位,

 

 

 

我们可以继续向线程池中提交新任务,如果池中没有空闲的线程,那么新任务将会被放入任务队列中,

 

 

 

当线程执行完任务时,

 

 

 

他们会从任务对应中获取任务,继续执行,

 

 

 

直到所有任务全部执行完毕,看完running状态,再来看下一个状态。

shoudown

 

 

 

shoudown表示线程池准备关闭,不接受新任务,但可以处理任务队列中的任务。

 

 

 

下面动画演示shoudown状态,这是一个正在运行的线程池,

 

 

 

当我们调用shoudown方法时,现成池的状态就由running变为shoudown,

 

 

 

所有提交的任务都会被拒绝,

 

 

 

但是池中正在执行的任务依然会继续执行完,

 

 

 

这也包括任务队列中还未执行的任务,

 

 

 

当队列中的任务都执行完时,线程池状态会由shoudown变为tidying。

 

 

 stop

看完shoudown状态,再来看下一个状态,stop。他表示线程池准备关闭,不接受新任务,也不处理任务对接中的任务,还中断正在执行任务的线程。

 

 

 

下面动画演示 stop状态,这是一个正在运行的线程池,

 

 

 

当我们调用shoudownNow方法时,线程池状态由running变为stop,

 

 

 

所有提交的先入一律都会被拒绝,而且池中所有正在执行的任务都会被终止。 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

不仅如此,任务队列中的任务还会返回给调用者,

 

 

 

 

调用者拿到返回的任务以后可以继续执行完,他们现在可以看到线程池变为了一座空线程,

 

 

 

下一步就是将这座空城清理掉,shoudown与stop都是在为关闭线程池做准备工作.

tidying

 

 

 

下一个状态tidying则是线程池正在关闭的状态,此时所有任务已终止,线程池中的线程数量为0。

 

 

 

下面动画演示tidying状态,当所有任务都已终止,且池中工作线程数量也为零时,

 

 

 

状态由shoudown或stop变为tidying,

 

 

 

 

此刻的状态表示收尾工作已完成。

 

 

 termineted

再来看看最后一个状态,termineted的。他表示线程池彻底关闭,

 

 

 

下面动画演示termineted的状态,在收尾工作完成以后,最后调用 termineted的方法彻底将限线程关闭。 

 

 

 



 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

至此我们看到了线程池每个状态的变化过程

 

 

 限制池生命周期

限制池生命周期也可以画出来了,线程池最初的状态是running,此时线程池正在运行,

 

 

调用shoudown方法以后状态由running变为shoudown,此时线程值准备关闭,让线程池由正在运行变为准备关闭。

 

 

 

 

 

还有一种方式,那就是调用shoudownnow方法,状态由running变为stop,

 

 

在准备工作做完以后就可以开始清理工作了,状态由shoudown变为tidying,需要任务队列为空,工作线程数量为0,

 

 

也就是要执行完其中所有任务,包括任务队列中的任务状态

 

由stop变为tidying,只需工作线程数量为0,任务队列中的任务已经返回给调用者了,不需要清空任务队列,

 

 

最后就用 termineted方法即可让状态由tidying变为termineted,此时的线程池已经彻底完毕。 

 

 

总结

最后总结一下本节内容,本节介绍了线程池状态及生命周期各状态代表的意思,这里就不再赘述了。另外线程池生命周期如图所示,大家如果有需要的话可以截屏保存下来,这些内容在面试中经常会被问到。 

 

 

 

 

附录:

笔记完整文本:

线程池在其生命周期中会经历多种状态,这些状态被定义在threadPoolExecutor中,一共有5种。这些状态所对应的描述如图所示,下面几小节将介绍这些状态。首先来看第一个状态,running,他表示线程池正在运行,可以接受新任务,并且也能处理任务队列中的任务,下面动画演示running状态,这是一个正在运行的线程池。其中有4个正在执行任务的线程,任务队列中还有2个未执行的任务,队列还有空位,我们可以继续向线程池中提交新任务,如果池中没有空闲的线程,那么新任务将会被放入任务队列中,当线程执行完任务时,他们会从任务对应中获取任务,继续执行,直到所有任务全部执行完毕,看完running状态,再来看下一个状态。 shoudown表示线程值准备关闭,不接受新任务,但可以处理任务队列中的任务。下面动画演示shoudown状态,这是一个正在运行的线程池,当我们调用shoudown方法时,现成池的状态就由running变为shoudown,所有提交的任务都会被拒绝,但是池中正在执行的任务依然会继续执行完,这也包括任务队列中还未执行的任务,当队列中的任务都执行完时,线程池状态会由shoudown变为tidying。看完shoudown状态,再来看下一个状态,stop。他表示线程池准备关闭,不接受新任务,也不处理任务对接中的任务,还中断正在执行任务的线程。下面动画演示 stop状态,这是一个正在运行的线程池,当我们调用shoudown方法时,线程池状态由running变为stop,所有提交的先入一律都会被拒绝,而且池中所有正在执行的任务都会被终止。 不仅如此,任务队列中的任务还会返回给调用者,调用者拿到返回的任务以后可以继续执行完,他们现在可以看到线程池变为了一座空线程,下一步就是将这座空城清理掉,shoudown与stop都是在为关闭线程池做准备工作,下一个状态tidying则是线程池正在关闭的状态,此时所有任务已终止,线程池中的线程数量为0。下面动画演示tidying状态,当所有任务都已终止,且时钟工作建成数量也为零时,状态由shoudown或stop变为tidying,此刻的状态表示收尾工作已完成。再来看看最后一个状态,termineted的。他表示线程池彻底关闭,下面动画演示termineted的状态,在收尾工作完成以后,最后调用 termineted的方法彻底将限线程关闭。 至此我们看到了线程池每个状态的变化过程,限制池生命周期也可以画出来了,线程池最初的状态是running,此时线程池正在运行,调用shoudown方法以后状态由running变为shoudown,此时线程值准备关闭,让线程池由正在运行变为准备关闭。还有一种方式,那就是调用shoudownnow方法,状态由running变为stop,在准备工作做完以后就可以开始清理工作了,状态由shoudown变为tidying,需要任务队列为空,工作线程数量为0,也就是要执行完其中所有任务,包括任务队列中的任务状态,由stop变为tidying,只需工作线程数量为0,任务队列中的任务已经返回给调用者了,不需要清空任务队列,最后就用 termineted方法即可让状态由tidying变为termineted,此时的线程池已经彻底完毕。 最后总结一下本节内容,本节介绍了线程池状态及生命周期各状态代表的意思,这里就不再赘述了。另外线程池生命周期如图所示,大家如果有需要的话可以截屏保存下来,这些内容在面试中经常会被问到。

 

标签:10,周期,状态,队列,shoudown,running,任务,线程
来源: https://www.cnblogs.com/cj8357475/p/16031337.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有