首先,java線程池的一個很是重要的類,就是ThreadPoolExecutor類java
新建一個線程池,代碼爲數組
ThreadPoolExecutor executor = new ThreadPoolExecutor(...);函數
構造函數的參數說一下spa
最關鍵的參數就是這麼幾個,最基本的任務分配策略也是基於這幾個參數。下面是任務分配策略線程
一、線程池初始默認線程數爲0,當有任務來臨時,建立新線程執行任務隊列
二、當來的任務數大於線程池規定線程數(corePoolSize )時,剩下多餘的任務到 阻塞任務隊列(bockingqueue )中等待it
三、當阻塞任務隊列也滿了的時候,也就是排隊也沒地兒排隊了的時候,線程池會新建線程來執行任務線程池
四、當線程池的線程數達到最大線程數(maximumPoolSize )時,再來任務也接不了了,會按照拒絕任務策略來處理剩下的事情。構造函數
keepAliveTimes 這個參數:當線程池中的線程數大於規定線程數(corePoolSize )時,並且又沒啥任務,這個時候,多餘的線程在 keepAliveTimes 時間後就會消亡,線程池線程數量小於 規定線程數(corePoolSize )queue
最後再說線程池的兩個方法,shutdown() 和 shutdownNow()
shutdown():執行這個方法後,線程池再也不接受新的任務,當執行完手裏的任務(包括阻塞隊列裏的任務)後,線程池關閉【這個就至關於要離職了,也要處理好手裏的事情】
shutdownNow():執行這個方法後,線程池再也不接受新的任務,而且會嘗試中斷手裏的任務,而後線程池關閉【這個就是要離職的時候,立刻什麼都不幹了,拍屁股走人】
若是您以爲這篇文章幫到您,請您順手點個贊,若是有什麼錯誤之處,也請您必定不吝賜教,咱們共同進步!