1. 程式人生 > >#一篇文章讓你瞭解四種執行緒池,學習Java不在困惑

#一篇文章讓你瞭解四種執行緒池,學習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知識,歡迎大家前來學習哦。

Java四種執行緒池的學習與總結

(2). newFixedThreadPool

建立一個定長執行緒池,可控制執行緒最大併發數,超出的執行緒會在佇列中等待。Java示例程式碼:

Java四種執行緒池的學習與總結

執行後可以看到效果,固定了執行緒數為4 ,列印4個數字後會休眠5s後再次列印4個數字。

(3) newScheduledThreadPool

建立一個定長執行緒池,支援定時及週期性任務執行。示例:

Java四種執行緒池的學習與總結

這樣就延遲了5秒執行操作。

(4) newSingleThreadExecutor

建立一個單執行緒化的執行緒池,它只會用唯一的工作執行緒來執行任務,示例:

Java四種執行緒池的學習與總結

這樣執行程式碼後,會使用一個執行緒一次打印出0 1 2 3 4 間隔5s。 

執行緒池的好處:

1.減少在建立和銷燬執行緒上所花的時間以及系統資源的開銷 。

2.避免了造成系統建立大量執行緒而導致消耗完系統記憶體。

總結: FixedThreadPool是一個優秀的執行緒池,使用時需要注意當執行緒池中沒有可執行任務時,它不會釋放工作執行緒,還會佔用一定的系統資源;CachedThreadPool執行緒池,當沒有任務執行時,會釋放調,當有任務時,又要建立,需要 消耗系統開銷,而且在大量併發執行時,需要注意控制任務量,避免大量高併發導致系統問題。