在Java開發(fā)中,,有時遇到多線程的開發(fā)時,直接使用Thread操作,,對程序的性能和維護(hù)上都是一個問題,,使用Java提供的線程池來操作可以很好的解決問題,于是找了下API看到Java提供四種線程池使用,,Java通過Executors提供四種線程池,,分別為: 1、newCachedThreadPool創(chuàng)建一個可緩存線程池,,如果線程池長度超過處理需要,,可靈活回收空閑線程,若無可回收,,則新建線程,。 2、newFixedThreadPool 創(chuàng)建一個定長線程池,,可控制線程最大并發(fā)數(shù),,超出的線程會在隊列中等待。 3,、newScheduledThreadPool 創(chuàng)建一個定長線程池,,支持定時及周期性任務(wù)執(zhí)行。 4,、newSingleThreadExecutor 創(chuàng)建一個單線程化的線程池,,它只會用唯一的工作線程來執(zhí)行任務(wù),保證所有任務(wù)按照指定順序(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)建一個定長線程池,,支持定時及周期性任務(wù)執(zhí)行,。示例: 這樣就延遲了5秒執(zhí)行操作,。 (4) newSingleThreadExecutor 創(chuàng)建一個單線程化的線程池,,它只會用唯一的工作線程來執(zhí)行任務(wù),示例: 這樣執(zhí)行代碼后,,會使用一個線程一次打印出0 1 2 3 4 間隔5s。 線程池的好處: 1.減少在創(chuàng)建和銷毀線程上所花的時間以及系統(tǒng)資源的開銷 ,。 2.避免了造成系統(tǒng)創(chuàng)建大量線程而導(dǎo)致消耗完系統(tǒng)內(nèi)存,。 總結(jié): FixedThreadPool是一個優(yōu)秀的線程池,使用時需要注意當(dāng)線程池中沒有可運行任務(wù)時,,它不會釋放工作線程,還會占用一定的系統(tǒng)資源,;CachedThreadPool線程池,,當(dāng)沒有任務(wù)執(zhí)行時,會釋放調(diào),,當(dāng)有任務(wù)時,,又要創(chuàng)建,需要 消耗系統(tǒng)開銷,,而且在大量并發(fā)執(zhí)行時,,需要注意控制任務(wù)量,避免大量高并發(fā)導(dǎo)致系統(tǒng)問題,。 我做開發(fā)十多年的時間,,如果大家對于學(xué)習(xí)java的學(xué)習(xí)方法,學(xué)習(xí)路線以及你不知道自己應(yīng)該是自學(xué)還是培訓(xùn)的疑問,,都可以隨時來問我,,大家可以加我的java交流學(xué)習(xí)qun:615741636。qun內(nèi)有學(xué)習(xí)教程以及開發(fā)工具,。 |
|