為什么要使用線程池


為什么要使用線程池
 

1.為什么要使用線程池    

    在java中,如果每個請求到達就創建一個新線程,開銷是相當大的。在實際使用中,服務器在創建和銷毀線程上花費的時間和消耗的系統資源都相當大,甚至可能要比在處理實際的用戶請求的時間和資源要多的多。除了創建和銷毀線程的開銷之外,活動的線程也需要消耗系統資源。如果在一個jvm里創建太多的線程,可能會使系統由於過度消耗內存或“切換過度”而導致系統資源不足。為了防止資源不足,服務器應用程序需要采取一些辦法來限制任何給定時刻處理的請求數目,盡可能減少創建和銷毀線程的次數,特別是一些資源耗費比較大的線程的創建和銷毀,盡量利用已有對象來進行服務,這就是“池化資源”技術產生的原因。    

    線程池主要用來解決線程生命周期開銷問題和資源不足問題。通過對多個任務重復使用線程,線程創建的開銷就被分攤到了多個任務上了,而且由於在請求到達時線程已經存在,所以消除了線程創建所帶來的延遲。這樣,就可以立即為請求服務,使用應用程序響應更快。另外,通過適當的調整線程中的線程數目可以防止出現資源不足的情況。

2.線程池的組成部分
    一個比較簡單的線程池至少應包含線程池管理器、工作線程、任務列隊、任務接口等部分。其中線程池管理器的作用是創建、銷毀並管理線程池,將工作線程放入線程池中;工作線程是一個可以循環執行任務的線程,在沒有任務是進行等待;任務列隊的作用是提供一種緩沖機制,將沒有處理的任務放在任務列隊中;任務接口是每個任務必須實現的接口,主要用來規定任務的入口、任務執行完后的收尾工作、任務的執行狀態等,工作線程通過該接口調度任務的執行。
    線程池管理器至少有下列功能:創建線程池,銷毀線程池,添加新任務。
    工作線程是一個可以循環執行任務的線程,在沒有任務時將等待。

    任務接口是為所有任務提供統一的接口,以便工作線程處理。任務接口主要規定了任務的入口,任務執行完后的收尾工作,任務的執行狀態等。


3.線程池適合應用的場合
    當一個服務器接受到大量短小線程的請求時,使用線程池技術是非常合適的,它可以大大減少線程的創建和銷毀次數,提高服務器的工作效率。但是線程要求的運動時間比較長,即線程的運行時間比

 


免責聲明!

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



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