#一篇文章讓你瞭解四種執行緒池,學習Java不在困惑
在Java開發中,有時遇到多執行緒的開發時,直接使用Thread操作,對程式的效能和維護上都是一個問題,使用Java提供的執行緒池來操作可以很好的解決問題,於是找了下API看到Java提供四種執行緒池使用,Java通過Executors提供四種執行緒池,分別為:
1、newCachedThreadPool建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒。
2、newFixedThreadPool 建立一個定長執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待。
3、newScheduledThreadPool 建立一個定長執行緒池,支援定時及週期性任務執行。
4、newSingleThreadExecutor 建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,保證所有任務按照指定順序(FIFO, LIFO, 優先順序)執行。
下面使用Java程式碼看一下使用:
(1) newCachedThreadPool
建立一個可快取執行緒池,如果執行緒池長度超過處理需要,可靈活回收空閒執行緒,若無可回收,則新建執行緒
如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免費送java的視訊教程噢!我整理了一份適合18年學習的java乾貨,送給每一位想學的小夥伴,並且每天晚上8點還會在群內直播講解Java知識,歡迎大家前來學習哦。
(2). newFixedThreadPool
建立一個定長執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待。Java示例程式碼:
執行後可以看到效果,固定了執行緒數為4 ,列印4個數字後會休眠5s後再次列印4個數字。
(3) newScheduledThreadPool
建立一個定長執行緒池,支援定時及週期性任務執行。示例:
這樣就延遲了5秒執行操作。
(4) newSingleThreadExecutor
建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,示例:
這樣執行程式碼後,會使用一個執行緒一次打印出0 1 2 3 4 間隔5s。
執行緒池的好處:
1.減少在建立和銷燬執行緒上所花的時間以及系統資源的開銷 。
2.避免了造成系統建立大量執行緒而導致消耗完系統記憶體。
總結: FixedThreadPool是一個優秀的執行緒池,使用時需要注意當執行緒池中沒有可執行任務時,它不會釋放工作執行緒,還會佔用一定的系統資源;CachedThreadPool執行緒池,當沒有任務執行時,會釋放調,當有任務時,又要建立,需要 消耗系統開銷,而且在大量併發執行時,需要注意控制任務量,避免大量高併發導致系統問題。