1.什么是線程池?為什么要使用線程池


線程池作為java開發者必備技能,在日常開發中十分常見,所以從這一節開始我們介紹線程池。

今天的內容有兩點,第一點,為什么要使用線程池?第二點,什么是線程池?

 

 

 

 

首先來看第一點,為什么要使用線程池?

 

 

 

在沒有使用線程池之前,我們是如何執行任務的?這是一個任務,任務內容是輸出當前線程名稱,接下來我們來執行該任務。

 

 

 

首先將任務創建出來,然后創建一個線程,接着將任務傳遞給線程,緊接着啟動線程,任務就開始執行了。程序輸出thread-0,

 

 

 

 

 

 

我們發現一個線程它只能執行一個任務,不能連續執行任務。例如這里有三個任務,它沒法連續執行,沒有上述這種寫法

 

 

 

只能在創建兩個線程去執行另外兩個任務,程序分別輸出三個線程的名稱,這些線程執行。完任務以后就銷毀了,如果再有任務時,則需要重新創建線程,這也暴露了一個問題,線程不能復用。

 

 

 

 

 

 

 

重復創建和銷毀線程耗時耗資源,如果能復用就好了,復用的好處就是省時省資源。

下面我們就來看看線程池是如何執行任務的,還是這三個任務創建只有一個線程的線程池,

這個線程池里面只有一個線程,這個不是重點,重點是他里面的這個線程可以復用調用他的execute的方法,將需要執行的任務提交給線程池,任務提交以后,線程池會自動分配線程去執行提交過來的任務,最后記得調用它的shutdown方法關閉線程池,當線程池中的任務全部執行完畢以后,線程池則會關閉。線程池關閉以后無法再提交任務,程序輸出三個名稱一樣的線程,說明一個縣城執行了三個任務。足以證明線程得到復用。

 

 

 

 

 

 

 

 

對比線程,線程池的好處有很多,這里列舉三個,

第一個,降低資源消耗,通過重復利用已創建的線程,降低線程創建和銷毀造成的消耗。

第二個,提高響應速度,當有任務時,任務可以不需要等待線程創建就能立即執行。

第三個,提高現成的可管理性。線程是稀缺資源,如果無限制的創建,不僅會消耗系統資源,還會降低系統的穩定性。使用線程池可以進行統一的分配、調優和監控。

 

 

 

什么是線程池?

介紹完為什么要使用線程池,接下來我們再來看看什么是線程池。線程池是一種基於池化思想管理現成的工具。

 

 

 

在沒有現成值之前,當有任務需要執行時,

 

 

 

我們會創建一個線程,

 

 

 

然后將任務傳遞給線程,

 

 

 

並且一個線程只能執行一個任務,如果還有任務,我們就只能再創建一個線程去執行它,

 

 

 

 

 

當任務執行完時,線程就銷毀了。

 

 

 

重復創建和銷毀線程是一件很耗時耗資源的是,如果線程能復用,那么就減少很多不必要的消耗,於是線程池就孕而生了。

 

 

事先將線程創建后,當有任務需要執行時提交給線程池,

 

 

線程池分配線程去執行,

 

 

有再多的任務也不怕。線程池中的線程能復用,

 

 

執行完一個任務再接着執行其他任務。

 

 

 

 

 

當所有任務都執行完時,

 

 

我們可以選擇關閉線程池,

 

 

也可以選擇等待接收任務。

線程池的英文叫做threadpool,thread線程的意思,Pool池的意思,Threadpool線程池,這是線程池的核心UML類圖。

 

 

 

 

這里面的每一個元素后續章節都會講到,最后總結一下本節的內容,本節介紹了為什么要使用線程池和什么是線程池,這里就不再贅述了。在實際開發中,線程池用的非常多,希望大家可以掌握它。下一節我們將介紹如何創建線程池,

本節的代碼地址如下,大家有需要的話可以前去查看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM