在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)問題。