继上篇所讲述的java线程池数据结构,我们已经拿到了搭建java线程池的原料,接下来我们需要设计合理的算法来使线程池合理运作起来。
java线程池属于软件工程领域的范畴,软件工程领域的算法特指的是工程某些特定功能的流程,某个组件的状态机,系统序列图以及整个系统或组件的运作流程。
所以,java线程池核心算法(流程)可以拆分为线程池的状态转移流程,线程创建以及执行的周期以及任务的添加和缓存机制。
首先讲线程池的状态转移流程,参考下面的状态转移图:暴露给调用线程的有shutDown() 和 shutDownNow()方法。状态SHUTDOWN和STOP的区别是:SHOTDOWN 需要完成已经添加到线程里任务(包括正在执行的任务和缓存队列里的任务),而STOP则会立即停止所有的任务。TIDYING状态任务与线程都已经清空了,TERMINATED 标记线程池已经停止。
java线程池状态转移图线程创建以及执行的周期以及任务的添加和缓存机制二者是有机结合在一起的:连接点在于任务的数量与线程数量的大小差异(线程数根据任务数做到动态扩缩)和线程创建需要一个任务做为firstTask.详情请看下图:
线程池任务添加流程图下一篇将从线程池重点实现方法讲述上面的流程:
《java线程池重点实现方法》
网友评论