日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理

發(fā)布時(shí)間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、一般的隊(duì)列只能保證作為一個(gè)有限長度的緩沖區(qū),如果超出了緩沖長度,就無法保留當(dāng)前的任務(wù)了,阻塞隊(duì)列通過阻塞可以保留住當(dāng)前想要繼續(xù)入隊(duì)的任務(wù)。阻塞隊(duì)列可以保證任務(wù)隊(duì)列中沒有任務(wù)時(shí)阻塞獲取任務(wù)的線程,使得線程進(jìn)入wait狀態(tài),釋放cpu資源。阻塞隊(duì)列自帶阻塞和喚醒的功能,不需要額外處理,無任務(wù)執(zhí)行時(shí),線程池利用阻塞隊(duì)列的take方法掛起,從而維持核心線程的存活、不至于一直占用cpu資源

2、在創(chuàng)建新線程的時(shí)候,是要獲取全局鎖的,這個(gè)時(shí)候其它的就得阻塞,影響了整體效率就好比一個(gè)飯店里面有10個(gè)(core)正式工的名額,最多招10個(gè)正式工,要是任務(wù)超過正式工人數(shù)(task>core)的情況下,工廠領(lǐng)導(dǎo)(線程池)不是首先擴(kuò)招工人,還是這10人,但是任務(wù)可以稍微積壓一下,即先放到隊(duì)列去(代價(jià)低) 。10個(gè)正式工慢慢干,遲早會千完的,要是任務(wù)還在繼續(xù)增加,超過正式工的加班忍耐極限了(隊(duì)列滿了) ,就的招外包幫忙了(注意是臨時(shí)工)要是正式工加上外包還是不能完成任務(wù),那新來的任務(wù)就會被領(lǐng)導(dǎo)拒絕了(線程池的拒絕策略)

線程池中線程復(fù)用原理

線程池將線程和任務(wù)進(jìn)行解耦,線程是線程,任務(wù)是任務(wù),擺脫了之前通過Thread創(chuàng)建線程時(shí)的一個(gè)線程必須對應(yīng)一個(gè)任務(wù)的限制。在線程池中,同一個(gè)線程可以從阻塞隊(duì)列中不斷獲取新任務(wù)來執(zhí)行,其核心原理在于線程池對Thread進(jìn)行了封裝,并不是每次執(zhí)行任務(wù)都會調(diào)用Thread.start()來創(chuàng)建新線程,而是讓每個(gè)線程去執(zhí)行一個(gè)"循環(huán)任務(wù)",在這個(gè)"循環(huán)任務(wù)"中不停檢查是否有任務(wù)需要被執(zhí)行,如果有則直接執(zhí)行,也就是調(diào)用任務(wù)中的run方法,將run方法當(dāng)成一個(gè)普通的方法執(zhí)行,通過這種方式只使用固定的線程就將所有任務(wù)的run方法串聯(lián)起來。

總結(jié)

以上是生活随笔為你收集整理的线程池中阻塞队列的作用?为什么是先添加列队而不是先创建最大线程?线程池中线程复用原理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。