亚洲精品中文免费|亚洲日韩中文字幕制服|久久精品亚洲免费|一本之道久久免费

      
      

            <dl id="hur0q"><div id="hur0q"></div></dl>

                Java多線程配置知識(shí)點(diǎn)

                線程在現(xiàn)在工作中出現(xiàn)越來越頻繁、需要我們熟記并且能熟練地使用之、對(duì)相關(guān)線程池的一些配置需要我們非常熟悉。

                1. 參數(shù)詳解

                1.1 corePoolSize

                corePoolSize 核心線程數(shù)

                – 核心線程會(huì)一直存活,即使沒有任務(wù)需要執(zhí)行- 當(dāng)線程數(shù)小于核心線程數(shù)時(shí),即使有線程空閑,線程池也會(huì)優(yōu)先創(chuàng)建新線程處理- 設(shè)置allowCoreThreadTimeOut=true(默認(rèn)false)時(shí),核心線程會(huì)超時(shí)關(guān)閉

                1.2 queueCapacity

                queueCapacity 任務(wù)隊(duì)列容量(阻塞隊(duì)列)

                • 當(dāng)核心線程數(shù)達(dá)到最大時(shí),新任務(wù)會(huì)放在隊(duì)列中排隊(duì)等待

                1.3 maxPoolSize

                maxPoolSize 最大線程數(shù)

                – 當(dāng)線程數(shù) >= corePoolSize 且任務(wù)隊(duì)列已滿時(shí),線程池會(huì)創(chuàng)建新線程來處理任務(wù)- 當(dāng)線程數(shù) = maxPoolSize且任務(wù)隊(duì)列已滿時(shí),線程池會(huì)拒絕處理任務(wù)而拋出異常

                1.4 keepAliveTime

                keepAliveTime 線程空閑時(shí)間

                – 當(dāng)線程空閑時(shí)間達(dá)到keepAliveTime時(shí),線程會(huì)退出,直到線程數(shù)量=coolPoolSize- 如果allowCoreThreadTimeOut=true時(shí),則會(huì)直到線程數(shù)量=0

                1.5 allowCoreThreadTimeOut

                allowCoreThreadTimeOut 允許核心線程超時(shí)

                1.6 rejectedExecutionHandler

                rejectedExecutionHandler 任務(wù)拒絕處理器

                • 兩種情況會(huì)拒絕處理任務(wù)
                • 當(dāng)線程數(shù)已經(jīng)達(dá)到maxPoolSize且任務(wù)隊(duì)列已滿,就會(huì)拒絕新的任務(wù)
                • 當(dāng)線程池被調(diào)運(yùn)shutdown() 然后,會(huì)等待線程池里的任務(wù)執(zhí)行完畢在shutdown。如果在調(diào)運(yùn)shutdown() 和線程池真正shutdown之間提交的任務(wù),會(huì)拒絕新的任務(wù)
                • 線程池會(huì)調(diào)運(yùn)rejectedExecutionHandler來處理這個(gè)任務(wù),如果沒有設(shè)置默認(rèn)是AbortPolicy,會(huì)拋出異常

                – ThreadPoolExecutor類有幾個(gè)內(nèi)部實(shí)現(xiàn)類來處理這類情況 1. **AbortPolicy** 丟棄任務(wù)、拋運(yùn)行時(shí)異常 1. **CallerRunsPolicy** 執(zhí)行任務(wù) 1. **DisCardPolicy** 忽視,什么都不會(huì)發(fā)生 1. **DisCardOldestPolicy** 從隊(duì)列中提出最先 進(jìn)入隊(duì)列(最后一個(gè)執(zhí)行)的任務(wù)

                • 實(shí)現(xiàn)RejectedExecutionHandler接口,可自定義處理器

                2. ThreadPoolExecutor 執(zhí)行順序

                線程池按照以下行為執(zhí)行任務(wù)

                1. 當(dāng)線程數(shù) = 核心線程數(shù),且任務(wù)隊(duì)列未滿時(shí),將任務(wù)放入任務(wù)隊(duì)列。3. 當(dāng)線程數(shù) >= 核心線程數(shù),且任務(wù)隊(duì)列已滿- 若線程數(shù) < 最大線程數(shù),創(chuàng)建線程- 若線程數(shù) = 最大線程數(shù),拋出異常,拒絕任務(wù)

                3. 如何設(shè)置參數(shù)

                3.1 默認(rèn)值

                corePoolSize = 1queueCapacity = Integer.MAX_VALUEmaxPoolSize = Integer.MAX_VALUEkeepAliveTime = 60sallowCoreThreadTimeOut = falserejectedExecutionHandler = AbortPolicy

                3.2 如何來設(shè)置

                • 需要根據(jù)幾個(gè)值來決定

                tasks : 每秒的任務(wù)數(shù),假設(shè)為 500 – 1000taskcost : 每個(gè)任務(wù)花費(fèi)時(shí)間,假設(shè)為0.1sresponsetime : 系統(tǒng)允許容忍的最大響應(yīng)時(shí)間,假設(shè)為1s

                • 計(jì)算方式

                corePoolSize = 每秒需要多少個(gè)線程處理 * threadcount = tasks/(1/taskcost) =tasks*taskcout = (500~1000)*0.1 = 50~100 個(gè)線程。corePoolSize設(shè)置應(yīng)該大于50 * 根據(jù)8020原則,如果80%的每秒任務(wù)數(shù)小于800,那么corePoolSize設(shè)置為80即可queueCapacity = (coreSizePool/taskcost)*responsetime * 計(jì)算可得 queueCapacity = 80/0.1*1 = 80。意思是隊(duì)列里的線程可以等待1s,超過了的需要新開線程來執(zhí)行 * 切記不能設(shè)置為Integer.MAX_VALUE,這樣隊(duì)列會(huì)很大,線程數(shù)只會(huì)保持在corePoolSize大小,當(dāng)任務(wù)陡增時(shí),不能新開線程來執(zhí)行,響應(yīng)時(shí)間會(huì)隨之陡增。maxPoolSize = (max(tasks)- queueCapacity)/(1/taskcost) * 計(jì)算可得 maxPoolSize = (1000-80)/10 = 92 * (最大任務(wù)數(shù)-隊(duì)列容量)/每個(gè)線程每秒處理能力 = 最大線程數(shù)rejectedExecutionHandler:根據(jù)具體情況來決定,任務(wù)不重要可丟棄,任務(wù)重要?jiǎng)t要利用一些緩沖機(jī)制來處理keepAliveTime和allowCoreThreadTimeout采用默認(rèn)通常能滿足

                4. 使用案例

                @Componentpublic class KafkaReceiver { @Autowired private BroadbandService broadbandService; private ThreadFactory namedThreadFactory = new ThreadFactoryBuilder() .setNameFormat(“deal-pool-%d”) .build(); private ExecutorService threadPool = new ThreadPoolExecutor(10, 20, 5, TimeUnit.SECONDS, new LinkedBlockingQueue(10), namedThreadFactory, new ThreadPoolExecutor.CallerRunsPolicy()); /** * 監(jiān)聽kafka消息受理業(yè)務(wù) */ @KafkaListener(topics = “${kafka.topics[1]}”) public void listenerKafkaProductCommit(ConsumerRecord record) { threadPool.execute(() -> { try { BusinessOrder businessOrder = JsonUtil.jsonToObject(record.value(), BusinessOrder.class); log.info(“消息隊(duì)列正在工作,訂單號(hào): {}”, businessOrder.getOrderNo()); //嘗試多線程處理 broadbandService.asynSchoolBroadbandRemoveService(businessOrder); } catch (Exception e) { log.error(“消息隊(duì)列正在工作異常”, e); } }); } }

                鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場(chǎng),版權(quán)歸原作者所有,如有侵權(quán)請(qǐng)聯(lián)系管理員(admin#wlmqw.com)刪除。
                用戶投稿
                上一篇 2022年7月3日 09:15
                下一篇 2022年7月3日 09:15

                相關(guān)推薦

                • 妻子發(fā)微信:“我老公不在,快來”,同事:“下了班就來找你”

                  在現(xiàn)如今網(wǎng)絡(luò)如此發(fā)達(dá)的時(shí)代,大家可以從各個(gè)地方了解到全國(guó)大事小事,正所謂世界之大無奇不有,每天都發(fā)生著奇奇怪怪的事情,今天小編突然看到這樣一件事,看完之后都不知道說什么好了。 王某…

                  2022年11月26日
                • 劉畊宏回應(yīng)梅西輸球后哭了:跳操流汗到眼睛 剛好有點(diǎn)流鼻水

                  11月23日,劉畊宏發(fā)言回應(yīng)自己再梅西輸球后流淚的消息,他寫道:“我是有些難過… 然后…跳操流汗到眼睛,剛好有點(diǎn)流鼻水,阿根廷之后的比賽會(huì)贏的!”據(jù)悉,11月22日的世界杯比賽中,…

                  2022年11月26日
                • EDG粉絲酸了!JDG重磅官宣,頂級(jí)打野Kanavi留在LPL賽區(qū)

                  2022英雄聯(lián)盟職業(yè)聯(lián)賽冬季轉(zhuǎn)會(huì)期已經(jīng)于11月22日拉開帷幕,在轉(zhuǎn)會(huì)期首日作為L(zhǎng)PL觀眾關(guān)注的焦點(diǎn)的JDG戰(zhàn)隊(duì),就官宣了Yagao離隊(duì)以及Homme續(xù)約的消息,這讓人十分意外。畢竟…

                  2022年11月25日
                • 《樂隊(duì)的海邊》第二場(chǎng)live秀開啟 趙夢(mèng)為鄭秀妍寫中文歌詞

                  今日(11月25日),芒果TV女性經(jīng)營(yíng)勵(lì)志奮斗真人秀《樂隊(duì)的海邊》第二期即將上線。張儷、趙夢(mèng)、鄭秀妍、于文文、劉戀、張?zhí)鞇墼诤D鲜…偤J薪?jīng)營(yíng)的“炸廚”音樂餐廳蒸蒸日上,收獲顧客滿滿…

                  2022年11月25日
                • 北京疫情為什么突然爆發(fā)(北京疫情為什么突然增多)

                  這幾天北京疫情的新增情況也突然開始變得嚴(yán)重起來了,大家對(duì)本輪北京疫情爆發(fā)的原因也十分好奇。北京疫情為什么突然爆發(fā)?尤其是本周北京疫情的新增開始越來越多了,這讓民眾對(duì)于本輪疫情的發(fā)展…

                  2022年11月25日
                • 為什么北京疫情越來越嚴(yán)重(疫情為什么越控制越嚴(yán)重)

                  有在關(guān)注北京疫情的小伙伴應(yīng)該注意到了,這幾天北京疫情的新增數(shù)據(jù)情況也開始越發(fā)的嚴(yán)重起來,大家對(duì)北京此次疫情發(fā)展情況也都不斷分析。為什么北京疫情越來越嚴(yán)重?導(dǎo)致北京本輪疫情的原因是什…

                  2022年11月25日
                • 5+3疫情防控從哪天開始算(遼寧疫情防控最新政策)

                  最近有關(guān)國(guó)內(nèi)各地的疫情大家也都有在持續(xù)關(guān)注,目前國(guó)內(nèi)各地疫情隔離時(shí)間也根據(jù)二十條防控措施有了新的調(diào)整。那么,5+3疫情防控從哪天開始算?對(duì)于密接的5+3隔離時(shí)間計(jì)算大家還是比較關(guān)心…

                  2022年11月25日
                • 藍(lán)碼怎么變綠碼需要幾天(藍(lán)碼怎么變綠碼需要幾天)

                  大家都知道健康碼的顏色有紅碼、綠碼、黃碼,近日湖南健康碼上線“藍(lán)碼”,不少小伙伴發(fā)現(xiàn)自己健康碼變藍(lán)了,都想趕緊恢復(fù)綠碼,那么藍(lán)碼怎么變綠碼需要幾天?下面小編為大家?guī)硭{(lán)碼變綠碼需要…

                  2022年11月25日
                • 拼多多百億補(bǔ)貼預(yù)售一般多久發(fā)貨(拼多多百億補(bǔ)貼預(yù)售)

                  拼多多里面有很多優(yōu)惠活動(dòng),其中百億補(bǔ)貼活動(dòng)非?;鸨恍├锩娴臇|西價(jià)格比別的平臺(tái)便宜,質(zhì)量也有保障,還有預(yù)售的活動(dòng),那么拼多多百億補(bǔ)貼預(yù)售一般多久發(fā)貨?下面小編為大家?guī)砥炊喽喟賰|…

                  2022年11月25日
                • 北京疫情多久能解除封控(北京疫情還要多久結(jié)束)

                  最近一段時(shí)間北京疫情形勢(shì)備受關(guān)注,馬上就要到年底了,不少人想要去北京辦事,。都非常關(guān)注當(dāng)?shù)匾咔橄嚓P(guān)政策,那么 北京疫情多久能解除封控?北京疫情什么時(shí)候恢復(fù)正常生活?下面小編為大家?guī)А?/p>

                  2022年11月25日

                聯(lián)系我們

                聯(lián)系郵箱:admin#wlmqw.com
                工作時(shí)間:周一至周五,10:30-18:30,節(jié)假日休息