new Thread 弊端
- 每次new THread 新建對(duì)象,性能差
- 線程缺乏統(tǒng)一管理,可能無限制的新建線程,互相競(jìng)爭(zhēng),有可能占用過多系統(tǒng)資源導(dǎo)致死機(jī)或OOM
- 缺少更多功能,如更多執(zhí)行,定期執(zhí)行,線程中斷
線程池的好處
- 重用存在的線程,減少對(duì)象創(chuàng)建,消亡的開銷,性能佳
- 可有效控制最大并發(fā)線程數(shù),提高系統(tǒng)資源利用率,同時(shí)可以避免過多資源競(jìng)爭(zhēng),避免阻塞
- 提供定時(shí)執(zhí)行,定期執(zhí)行,單線程,并發(fā)數(shù)控制等功能
線程池- ThreadPoolExecutor
corePoolSize: 核心線程數(shù)量
maximumPoolSIze :線程最大線程數(shù)
workQueue:阻塞隊(duì)列,存儲(chǔ)等待執(zhí)行的任務(wù),很重要,會(huì)對(duì)線程池運(yùn)行過程產(chǎn)生重大影響
keepAliveTime:線程沒有任務(wù)執(zhí)行時(shí)最多保持多久時(shí)間終止
unit :keepAliveTime的時(shí)間單位
threadFactory:線程工廠,用來創(chuàng)建線程
-
rejectHandler: 當(dāng)拒絕處理任務(wù)時(shí)的策略
線程池- threadPoolExecutor.png execute(): 提交任務(wù),交給線程池執(zhí)行
submit(): 提交任務(wù),能夠返回執(zhí)行結(jié)果 execute+Future
shutdown():關(guān)閉線程池,等待任務(wù)都執(zhí)行完成
shutdownNow(): 關(guān)閉線程池,不等待任務(wù)執(zhí)行完
getTaskCount(); 線程池已執(zhí)行和未執(zhí)行的任務(wù)總數(shù)
getCompletedTaskCount():已完成的任務(wù)數(shù)量
getPoolSize():線程池當(dāng)前的線程數(shù)量
getActiveCount():當(dāng)前線程池中正在執(zhí)行任務(wù)的線程數(shù)量

線程池類圖.png
Executor框架接口
- Executors.newCachedThreadPool
- Executors.newFixedThreadPool
- Executors.newScheduledThreadPool
- Executors.newSingleThreadExecutor
線程池- 合理配置
- CPU密集型任務(wù),就需要盡量壓榨CPU,參考值可以設(shè)為NCPU+1
- IO密集型任務(wù),參考值可以設(shè)置為2*NCPU
