阻塞隊(duì)列(BlockQueue)
- 非阻塞方法
-
add
往滿的隊(duì)列中添加元素會(huì)報(bào)錯(cuò) -
remove
從空的隊(duì)列中移除元素會(huì)報(bào)錯(cuò) -
offer
往滿的隊(duì)列中添加元素會(huì)返回false -
poll
從空的隊(duì)列中移除元素會(huì)返回null
-
- 阻塞方法
put
take
使用場(chǎng)景:
阻塞隊(duì)列通常使用在生產(chǎn)者消費(fèi)者設(shè)計(jì)模式當(dāng)中,生產(chǎn)者不用關(guān)心生成的產(chǎn)品由哪個(gè)消費(fèi)者來執(zhí)行,只需將生產(chǎn)的產(chǎn)品放入隊(duì)列中,消費(fèi)者直接從隊(duì)列中取出產(chǎn)品使用,達(dá)到了生產(chǎn)者與消費(fèi)者之間解耦的目的和性能均衡問題.
常用的阻塞隊(duì)列有哪些?
- ArrayBlockQueue 一個(gè)由數(shù)組結(jié)構(gòu)組成的有界阻塞隊(duì)列
- LinkedBlockQueue 一個(gè)由鏈表結(jié)構(gòu)組成的有界阻塞隊(duì)列
- PriorityBlockQueue 一個(gè)支持優(yōu)先級(jí)排序的無界阻塞隊(duì)列
- DelayQueue 一個(gè)使用優(yōu)先級(jí)排序的無界阻塞隊(duì)列
- SyschronizedQueue 一個(gè)不存儲(chǔ)元素的阻塞隊(duì)列
- LinkedTransferQueue 一個(gè)由鏈表結(jié)構(gòu)組成的無界阻塞隊(duì)列
- LinkedBlockQueue 一個(gè)由鏈表結(jié)構(gòu)組成的雙向阻塞隊(duì)列
什么是線程池
?為什么要用線程池
?
線程池是用來管理線程的.
因?yàn)榫€程的創(chuàng)建、執(zhí)行和銷毀都是需要耗費(fèi)時(shí)間和資源的,所以通過線程池來避免線程的重復(fù)創(chuàng)建和銷毀
線程池ThreadPoolExecutor
(/?ɡ?zekj?t?r/)工作機(jī)制
-
線程池的創(chuàng)建 (各個(gè)參數(shù)的含義)
public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)
-
提交任務(wù)
-
execute(Runnable)
沒有返回值 -
submit(Callable/Runnable)
有返回值,返回Future
,最終還是交給execute
去執(zhí)行的
-
-
線程池的關(guān)閉
-
showDown
將正在執(zhí)行的線程以外的線程關(guān)閉 -
showDownNow
將正在執(zhí)行的線程和以外的線程都關(guān)閉
-
線程池中參數(shù)的含義文章來源:http://www.zghlxwxcb.cn/news/detail-442584.html
-
corePoolSize
核心線程數(shù),當(dāng)前可執(zhí)行線程的數(shù)量 -
maximumPoolSize
最大線程數(shù),當(dāng)阻塞隊(duì)列存滿后,將會(huì)創(chuàng)建新的線程來執(zhí)行任務(wù)(執(zhí)行的任務(wù)是當(dāng)前的任務(wù),而非阻塞隊(duì)列中的任務(wù)) -
keepAliveTime
控制空閑線程存活時(shí)間 -
unit
控制空閑線程存活時(shí)間單位(ms、s) -
workQueue
阻塞隊(duì)列,如果要執(zhí)行的線程數(shù)超過核心線程數(shù),將會(huì)會(huì)放在阻塞隊(duì)列中,阻塞隊(duì)列存滿后,依據(jù)最大線程數(shù)將會(huì)創(chuàng)建新的線程來執(zhí)行任務(wù) -
threadFactory
對(duì)創(chuàng)建線程做一些調(diào)節(jié) -
handler
拒絕策略,超出線程池執(zhí)行能力以外的任務(wù)拒絕執(zhí)行,最多可以執(zhí)行1100個(gè)線程,超過的不予執(zhí)行
RejectedExecutionHandler(拒絕策略)文章來源地址http://www.zghlxwxcb.cn/news/detail-442584.html
- CallerRunsPolicy
-
AbortHandler
通常默認(rèn)的拒絕策略是這一個(gè),直接拋出異常 - DiscardPolicy
- DiscardOldestPolicy
到了這里,關(guān)于10.阻塞隊(duì)列和線程池的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!