一篇文章讓你了解四種線程池,學習Java不再困惑

在Java開發(fā)中,有時遇到多線程的開發(fā)時,直接使用Thread操作,對程序的性能和維護上都是一個問題,使用Java提供的線程池來操作可以很好的解決問題,于是找了下API看到Java提供四種線程池使用,Java通過Executors提供四種線程池,分別為:

1、newCachedThreadPool創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程。

2、newFixedThreadPool 創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待。

3、newScheduledThreadPool 創(chuàng)建一個定長線程池,支持定時及周期性任務執(zhí)行。

4、newSingleThreadExecutor 創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務,保證所有任務按照指定順序(FIFO, LIFO, 優(yōu)先級)執(zhí)行。

下面使用Java代碼看一下使用:

(1) newCachedThreadPool

創(chuàng)建一個可緩存線程池,如果線程池長度超過處理需要,可靈活回收空閑線程,若無可回收,則新建線程

(2). newFixedThreadPool

創(chuàng)建一個定長線程池,可控制線程最大并發(fā)數(shù),超出的線程會在隊列中等待。Java示例代碼:

執(zhí)行后可以看到效果,固定了線程數(shù)為4 ,打印4個數(shù)字后會休眠5s后再次打印4個數(shù)字。

(3) newScheduledThreadPool

創(chuàng)建一個定長線程池,支持定時及周期性任務執(zhí)行。示例:

這樣就延遲了5秒執(zhí)行操作。

(4) newSingleThreadExecutor

創(chuàng)建一個單線程化的線程池,它只會用唯一的工作線程來執(zhí)行任務,示例:

這樣執(zhí)行代碼后,會使用一個線程一次打印出0 1 2 3 4 間隔5s。

線程池的好處:

1.減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷 。

2.避免了造成系統(tǒng)創(chuàng)建大量線程而導致消耗完系統(tǒng)內(nèi)存。

總結: FixedThreadPool是一個優(yōu)秀的線程池,使用時需要注意當線程池中沒有可運行任務時,它不會釋放工作線程,還會占用一定的系統(tǒng)資源;CachedThreadPool線程池,當沒有任務執(zhí)行時,會釋放調(diào),當有任務時,又要創(chuàng)建,需要 消耗系統(tǒng)開銷,而且在大量并發(fā)執(zhí)行時,需要注意控制任務量,避免大量高并發(fā)導致系統(tǒng)問題。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容