繼上篇所講述的java線程池?cái)?shù)據(jù)結(jié)構(gòu)帽氓,我們已經(jīng)拿到了搭建java線程池的原料驼鹅,接下來(lái)我們需要設(shè)計(jì)合理的算法來(lái)使線程池合理運(yùn)作起來(lái)州藕。
java線程池屬于軟件工程領(lǐng)域的范疇榨馁,軟件工程領(lǐng)域的算法特指的是工程某些特定功能的流程憨栽,某個(gè)組件的狀態(tài)機(jī),系統(tǒng)序列圖以及整個(gè)系統(tǒng)或組件的運(yùn)作流程翼虫。
所以屑柔,java線程池核心算法(流程)可以拆分為線程池的狀態(tài)轉(zhuǎn)移流程,線程創(chuàng)建以及執(zhí)行的周期以及任務(wù)的添加和緩存機(jī)制珍剑。
首先講線程池的狀態(tài)轉(zhuǎn)移流程掸宛,參考下面的狀態(tài)轉(zhuǎn)移圖:暴露給調(diào)用線程的有shutDown() 和 shutDownNow()方法。狀態(tài)SHUTDOWN和STOP的區(qū)別是:SHOTDOWN 需要完成已經(jīng)添加到線程里任務(wù)(包括正在執(zhí)行的任務(wù)和緩存隊(duì)列里的任務(wù)),而STOP則會(huì)立即停止所有的任務(wù)招拙。TIDYING狀態(tài)任務(wù)與線程都已經(jīng)清空了唧瘾,TERMINATED 標(biāo)記線程池已經(jīng)停止措译。
線程創(chuàng)建以及執(zhí)行的周期以及任務(wù)的添加和緩存機(jī)制二者是有機(jī)結(jié)合在一起的:連接點(diǎn)在于任務(wù)的數(shù)量與線程數(shù)量的大小差異(線程數(shù)根據(jù)任務(wù)數(shù)做到動(dòng)態(tài)擴(kuò)縮)和線程創(chuàng)建需要一個(gè)任務(wù)做為firstTask.詳情請(qǐng)看下圖:
下一篇將從線程池重點(diǎn)實(shí)現(xiàn)方法講述上面的流程:
《java線程池重點(diǎn)實(shí)現(xiàn)方法》