新聞中心
為什么要使用線程池?
1.減少了創(chuàng)建和銷毀線程的次數(shù),每個工作線程都可以被重復利用,可執(zhí)行多個任務。

2.可以根據(jù)系統(tǒng)的承受能力,調(diào)整線程池中工作線線程的數(shù)目,防止因為消耗過多的內(nèi)存,而把服務器累趴下(每個線程需要大約1MB內(nèi)存,線程開的越多,消耗的內(nèi)存也就越大,最后死機)。
Java里面線程池的頂級接口是Executor,但是嚴格意義上講Executor并不是一個線程池,而只是一個執(zhí)行線程的工具。真正的線程池接口是ExecutorService。
線程池主要用來解決線程生命周期開銷問題和資源不足問題。通過對多個任務重用線程,線程創(chuàng)建的開銷就被分攤到了多個任務上了,而且由于在請求到達時線程已經(jīng)存在,所以消除了線程創(chuàng)建所帶來的延遲。這樣,就可以立即為請求服務,使應用程序響應更快。另外,通過適當?shù)卣{(diào)整線程池中的線程數(shù)目可以防止出現(xiàn)資源不足的情況。
以Java為例講解,在Java中,如果每當一個請求到達就創(chuàng)建一個新線程,開銷是相當大的。在實際使用中,每個請求創(chuàng)建新線程的服務器在創(chuàng)建和銷毀線程上花費的時間和消耗的系統(tǒng)資源,甚至可能要比花在處理實際的用戶請求的時間和資源要多得多。
除了創(chuàng)建和銷毀線程的開銷之外,活動的線程也需要消耗系統(tǒng)資源。如果在一個JVM里創(chuàng)建太多的線程,可能會導致系統(tǒng)由于過度消耗內(nèi)存或“切換過度”而導致系統(tǒng)資源不足。為了防止資源不足,服務器應用程序需要一些辦法來限制任何給定時刻處理的請求數(shù)目,盡可能減少創(chuàng)建和銷毀線程的次數(shù),特別是一些資源耗費比較大的線程的創(chuàng)建和銷毀,盡量利用已有對象來進行服務,這就是“池化資源”技術(shù)產(chǎn)生的原因。
什么是線程池,如何使用,為什么要用?
一、線程池的作用:
線程池作用就是限制系統(tǒng)中執(zhí)行線程的數(shù)量。
根據(jù)系統(tǒng)的環(huán)境情況,可以自動或手動設(shè)置線程數(shù)量,達到運行的最佳效果;少了浪費了系統(tǒng)資源,多了造成系統(tǒng)擁擠效率不高。用線程池控制線程數(shù)量,其他線程排隊等候。一個任務執(zhí)行完畢,再從隊列的中取最前面的任務開始執(zhí)行。若隊列中沒有等待進程,線程池的這一資源處于等待。當一個新任務需要運行時,如果線程池中有等待的工作線程,就可以開始運行了;否則進入等待隊列。
二、如何使用:
要配置一個線程池是比較復雜的,尤其是對于線程池的原理不是很清楚的情況下,很有可能配置的線程池不是較優(yōu)的,因此在Executors類里面提供了一些靜態(tài)工廠,生成一些常用的線程池。
1. newSingleThreadExecutor創(chuàng)建一個單線程的線程池。這個線程池只有一個線程在工作,也就是相當于單線程串行執(zhí)行所有任務。如果這個唯一的線程因為異常結(jié)束,那么會有一個新的線程來替代它。此線程池保證所有任務的執(zhí)行順序按照任務的提交順序執(zhí)行。
2.newFixedThreadPool創(chuàng)建固定大小的線程池。每次提交一個任務就創(chuàng)建一個線程,直到線程達到線程池的最大大小。線程池的大小一旦達到最大值就會保持不變,如果某個線程因為執(zhí)行異常而結(jié)束,那么線程池會補充一個新線程。
3. newCachedThreadPool創(chuàng)建一個可緩存的線程池。如果線程池的大小超過了處理任務所需要的線程,那么就會回收部分空閑(60秒不執(zhí)行任務)的線程,當任務數(shù)增加時,此線程池又可以智能的添加新線程來處理任務。此線程池不會對線程池大小做限制,線程池大小完全依賴于操作系統(tǒng)(或者說JVM)能夠創(chuàng)建的最大線程大小。4.newScheduledThreadPool創(chuàng)建一個大小無限的線程池。此線程池支持定時以及周期性執(zhí)行任務的需求。
到此,以上就是小編對于java線程池作用及使用方式的問題就介紹到這了,希望這2點解答對大家有用。
網(wǎng)頁題目:Java中的線程池有什么用
文章分享:http://m.5511xx.com/article/cdeojpc.html


咨詢
建站咨詢
