java線程池的任務處理策略

首先,java線程池的一個很是重要的類,就是ThreadPoolExecutor類java

新建一個線程池,代碼爲數組

ThreadPoolExecutor executor = new ThreadPoolExecutor(...);函數

構造函數的參數說一下spa

  • int corePoolSize   線程池規定線程數(不超載的狀況下)
  • int maximumPoolSize  線程池最大線程數 (已經超載了,最大能力)
  • long keepAliveTimes  線程沒事幹時最長存活時間
  • int TimeUnit 就是上面這個參數keepAliveTimes  的單位(年、月、天、小時、分鐘、秒、毫秒、微秒)
  • BlockingQueue bockingqueue  阻塞任務隊列(超載狀況下排隊等待的任務數組)

最關鍵的參數就是這麼幾個,最基本的任務分配策略也是基於這幾個參數。下面是任務分配策略線程

一、線程池初始默認線程數爲0,當有任務來臨時,建立新線程執行任務隊列

二、當來的任務數大於線程池規定線程數(corePoolSize )時,剩下多餘的任務到 阻塞任務隊列(bockingqueue )中等待it

三、當阻塞任務隊列也滿了的時候,也就是排隊也沒地兒排隊了的時候,線程池會新建線程來執行任務線程池

四、當線程池的線程數達到最大線程數(maximumPoolSize )時,再來任務也接不了了,會按照拒絕任務策略來處理剩下的事情。構造函數

 

keepAliveTimes  這個參數:當線程池中的線程數大於規定線程數(corePoolSize )時,並且又沒啥任務,這個時候,多餘的線程在 keepAliveTimes  時間後就會消亡,線程池線程數量小於 規定線程數(corePoolSize )queue

 

最後再說線程池的兩個方法,shutdown() 和 shutdownNow()

shutdown():執行這個方法後,線程池再也不接受新的任務,當執行完手裏的任務(包括阻塞隊列裏的任務)後,線程池關閉【這個就至關於要離職了,也要處理好手裏的事情

shutdownNow():執行這個方法後,線程池再也不接受新的任務,而且會嘗試中斷手裏的任務,而後線程池關閉【這個就是要離職的時候,立刻什麼都不幹了,拍屁股走人

 

若是您以爲這篇文章幫到您,請您順手點個贊,若是有什麼錯誤之處,也請您必定不吝賜教,咱們共同進步!

相關文章
相關標籤/搜索