爲何要使用線程池

爲何要使用線程池
 java

1.爲何要使用線程池     服務器

    在java中,若是每一個請求到達就建立一個新線程,開銷是至關大的。在實際使用中,服務器在建立和銷燬線程上花費的時間和消耗的系統資源都至關大,甚至可能要比在處理實際的用戶請求的時間和資源要多的多。除了建立和銷燬線程的開銷以外,活動的線程也須要消耗系統資源。若是在一個jvm裏建立太多的線程,可能會使系統因爲過分消耗內存或「切換過分」而致使系統資源不足。爲了防止資源不足,服務器應用程序須要採起一些辦法來限制任何給定時刻處理的請求數目,儘量減小建立和銷燬線程的次數,特別是一些資源耗費比較大的線程的建立和銷燬,儘可能利用已有對象來進行服務,這就是「池化資源」技術產生的緣由。     jvm

    線程池主要用來解決線程生命週期開銷問題和資源不足問題。經過對多個任務重複使用線程,線程建立的開銷就被分攤到了多個任務上了,並且因爲在請求到達時線程已經存在,因此消除了線程建立所帶來的延遲。這樣,就能夠當即爲請求服務,使用應用程序響應更快。另外,經過適當的調整線程中的線程數目能夠防止出現資源不足的狀況。spa

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

    任務接口是爲全部任務提供統一的接口,以便工做線程處理。任務接口主要規定了任務的入口,任務執行完後的收尾工做,任務的執行狀態等。對象


3.線程池適合應用的場合
    當一個服務器接受到大量短小線程的請求時,使用線程池技術是很是合適的,它能夠大大減小線程的建立和銷燬次數,提升服務器的工做效率。可是線程要求的運動時間比較長,即線程的運行時間比接口

相關文章
相關標籤/搜索