如何設計乙個動態大小的執行緒池 2020面試必看

2021-10-06 20:37:08 字數 1144 閱讀 8846

· 什麼是執行緒池? 

· 執行緒池是管理執行緒物件的容器,將任務提交到執行緒池後,執行緒池會使用執行緒池中的執行緒來執行任務,執行緒使用完畢後不需要銷毀而是放回池中,從而可以減少建立和銷毀執行緒物件的開銷。

· 如何設計乙個動態大小的執行緒池,應該有哪些方法? 

· 乙個執行緒池包括以下四個基本組成部分:  

00001. 執行緒池管理類(threadpool):用來建立執行緒,銷毀執行緒,新增新任務等。

00002. 工作執行緒(poolworker):執行緒池中的執行緒,在沒有任務時處於等待狀態,可以迴圈的執行任務。

00003. 任務介面(task):每個任務必須實現的介面,以供工作執行緒排程任務的執行,它主要規定了任務的入口,任務執行完後的收尾工作,任務的執行狀態等。

00004. 任務佇列(taskqueue):用於存放還沒有處理的任務,提供一種緩衝機制。

· 應該包含哪些方法: 

00001. private threadpool():建立執行緒池。

00002. public static threadpool getthreadpool():獲得乙個預設執行緒個數的執行緒池。

00003. public void execute(runnable task):執行任務,其實是把任務加入到任務佇列,什麼時候執行由執行緒池管理器決定。

00004. public void execute(runnable task):批量執行任務,其實是把任務加入到任務佇列,什麼時候執行由執行緒池管理器決定。

00005. public void destroy():銷毀執行緒池,該方法保證在所有任務都完成的情況下才銷毀所有執行緒,否則等任務完成才銷毀。

00006. public int getworkthreadnumber():返回工作執行緒的個數。

00007. public int getfinishedtasknumber():返回已完成任務的個數 ,這裡的已完成是指除了任務佇列的任務個數,可能該任務並沒有實際執行完成。

00008. public void addthread():在保證執行緒池中所有執行緒正在執行,並且要執行執行緒的個數大於某一值時,增加執行緒池中線程的個數。 

00009. public void reducethread():在保證執行緒池中有很大一部分執行緒處於空閒狀態,並且空閒狀態的執行緒在大於某一值時,減少執行緒池中線程的個數。

執行緒池 如何正確的配置乙個執行緒池

我們在建立自己的執行緒池時,會時常因為不知道給核心執行緒數或者最大執行緒數設定多少為好,其實這個時需要看你的執行緒池的使用場景和伺服器cup的配置,根據這些前置條件,我們再去判斷如何去設定合適的執行緒數,並不是我們想設定多少執行緒數大小就可以設定多少,這樣可能會導致執行緒發揮不到最大的效能,甚至還有...

我設計的乙個執行緒池

執行緒池的設計 目前執行緒池主要包含下列部分 1.busy list 當前在處理客戶請求的執行緒佇列,即正在進行智慧型網頁分析的執行緒 2.idle list 當前執行緒池中空閒的執行緒佇列 3.request list 當使用者請求到達後,發現執行緒池中已經沒有可用執行緒,同時執行緒的個數已經達到...

執行緒池(一) 實現乙個簡單的執行緒池

我們知道頻繁的建立 銷毀執行緒是不可取的,為了減少建立和銷毀執行緒的次數,讓每個執行緒可以多次使用,我們就可以使用執行緒池,可以降低資源到的消耗。執行緒池裡面肯定有多個執行緒,那麼我們就簡單的用乙個陣列來儲存執行緒,那我們我們預設裡面有 5 個執行緒。那我們執行緒池裡只有五個執行緒能同時工作,那同時...