在有些工作場景中,比如說伺服器程式設計中,如果為每乙個客戶都分配乙個新的工作執行緒,並且當工作執行緒與客戶通訊結束時,這個執行緒被銷毀,這就需要頻繁的切換工作執行緒,這會帶來一些負擔,最主要的是系統大的開銷和系統資源不足問題。
首先,伺服器建立和銷毀工作執行緒的開銷很大,如果伺服器與很多客戶端通訊,並且與每個客戶端通訊的時間很短,那麼就會在建立和銷毀執行緒的時候造成很大的開銷。
其次,活動的執行緒也消耗系統資源,如果執行緒的建立數量沒有限制,當大量的客戶連線伺服器的時候,就會建立出大量的工作執行緒,他們會消耗大量的記憶體空間,導致系統的記憶體空間不足,影響伺服器的使用。
最後,如果執行緒的數目固定,並且每個執行緒都有很長的生命週期,那麼執行緒切換也就是固定的,這樣就會給伺服器減輕很多壓力,但是如果頻繁的建立和銷毀執行緒,必將導致頻繁的切換執行緒,使得執行緒之間的切換不再遵循系統的固定切換週期,執行緒切換的開銷也會增大很多。
執行緒池為這些問題提供了解決方案。執行緒池中預先建立了一些工作執行緒,他們不斷的從工作佇列中取出任務,然後執行,當執行完之後,會繼續執行工作佇列中的下乙個任務,減少了建立和銷毀執行緒的次數,每個執行緒都可以一直被重用,避免了建立和銷毀的開銷。另外,可以根據系統的實際承載能力,方便的調節執行緒池中線程的數目,防止因為消耗過量的系統資源而導致系統崩潰的問題。
為什麼要建立jdbc連線池
web與企業應用中的連線管理 一般我們在專案中都會抽取出一些公共設定資料庫連線的配置。專案在修改的時就可以很方便的去修改 而不需要在無盡的 中,去修改所有的 提高了軟體的可重用性 之前寫法 public boolean addmessage message message catch sqlexce...
為什麼要執行緒同步
class mythread2 implements runnable catch interruptedexception e system.out.println thread.currentthread getname 賣票,ticket this.ticket else public cla...
執行緒池 為什麼需要使用執行緒池
通過上面執行緒池的簡介,我們其實可以發現,普通的建立乙個執行緒都是及創及用,並且沒有上線,我想建立1000個執行緒或者建立10000個執行緒都可以,但是這樣建立執行緒的方式有乙個問題,那就是忽略了執行環境的效能,比如我們平時乙個64位4核的伺服器,他建議的執行緒數可以由公示算出來 執行緒池大小 物理...