日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

不同業務使用同一個線程池發生死鎖

來源: 責編: 時間:2024-09-10 09:50:21 199觀看
導讀在我們進行代碼開發時,我也見過很多全局注冊一個自定義線程池(也有可能不是自定義的,直接使用更不推薦Executors 創建的線程池),也許是業務量不高、也許是其他原因,反正全局可這一個線程池使勁造。一、看個代碼業務邏輯代碼

在我們進行代碼開發時,我也見過很多全局注冊一個自定義線程池(也有可能不是自定義的,直接使用更不推薦Executors 創建的線程池),也許是業務量不高、也許是其他原因,反正全局可這一個線程池使勁造。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

一、看個代碼

業務邏輯代碼:shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

自定義線程池 BizThreadPool 代碼如下:shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

通過上方的代碼示例,如果你還沒有看出問題,那你可以停留幾秒思考一下。shW28資訊網——每日最新資訊28at.com

自定義線程池創建,使用的這個隊列,嗯......,大家工作中一定不要這么用,此處只是為了做演示使用。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

如果你已經看出來了問題所在,也希望你能繼續看下去,驗證一下咱們是不是想的相同。shW28資訊網——每日最新資訊28at.com

二、有啥問題

經過短暫幾秒鐘的思考之后,決定還是運行一下 Demo 看看現象。shW28資訊網——每日最新資訊28at.com

封裝一個 controller 直接啟動 Springboot 程序,Java 啟動。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

啟動成功之后調用 GET http://localhost:8080/test/test,輸出結果如下。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

按照我們的預期,日志中應該也要輸出子任務才對啊,怎么創建的子任務沒有輸出呢,看現象應該是沒有執行。shW28資訊網——每日最新資訊28at.com

那我們先執行一下 jstack 命令看一下線程相關的信息,輸出信息中其中一段如下所示。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

通過上面的堆棧信息可以看出,主線程在將父任務執行完成之后,開啟了一個CountDownLatch并等待3個子任務執行完成。shW28資訊網——每日最新資訊28at.com

問題就在這,一直等待,一直等不到結果,所以就是我們剛開始看到的結果,只有父任務執行了,子任務并沒有執行。shW28資訊網——每日最新資訊28at.com

一次調用沒有響應,多次調用之后,達到服務器資源瓶頸時系統就該發生崩潰了。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

那么子任務為何沒有執行到呢?shW28資訊網——每日最新資訊28at.com

三、小試牛刀

首先我們從頭開始捋一下,先看下線程池的配置。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

我們在創建自定義線程池時,核心線程與最大線程都設置的1,那我們直接修改最大線程數量,讓線程池有線程可以執行子任務不就行了嗎?shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

對于生產中,核心線程與最大線程一般也不會設置為1,但是哪怕你設置為10、100、1000,極端情況下也會出現本文后面將要講述的問題。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

說干就干,創建自定義線程池的代碼變為了如下形式。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

非常自信的你重啟程序,然后調用接口,最終傻眼了,怎么沒變化?shW28資訊網——每日最新資訊28at.com

如果你修改完最大線程數就去重啟程序的話,說明線程池的工作原理你已經忘了!shW28資訊網——每日最新資訊28at.com

好吧原諒你了,這次不準再忘了,下面跟我一起來看看這究竟是什么原因。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

四、線程池工作流程

這里放一下線程池的工作流程。shW28資訊網——每日最新資訊28at.com

面試官:線程池核心線程設置為0時任務執行流程怎么樣的shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

知道了線程池的工作流程之后,在上述代碼中,哪怕增加了最大線程池的數量,最終子任務也并不會執行到,我們可以打印一下當前線程池的狀態進行輔助觀察。(上述代碼的printThreadPoolStatus()方法會進行線程池當前狀態的打印)shW28資訊網——每日最新資訊28at.com

調用一下GET http://localhost:8080/test/info方法查看線程池當前的狀態。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

可以看到隊列中存在3個任務在排隊,等待線程池分配線程執行任務。這也就是修改了最大線程池數量未生效的原因,因為還有一個無界隊列。shW28資訊網——每日最新資訊28at.com

當然如果任務一直增加,隊列中任務數量越來越多,達到服務器的瓶頸,就會發生OOM了。(阿里開發規范中不推薦使用無界隊列的原因)shW28資訊網——每日最新資訊28at.com

五、修改核心線程數量

那我們直接修改核心線程數量吧,核心線程超過任務數量?shW28資訊網——每日最新資訊28at.com

回答:不行。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

對于我們上面的例子來說,增加核心線程數量,擁有可以執行子任務的線程,確實可以解決當下場景。shW28資訊網——每日最新資訊28at.com

但是當并發量上來之后,或者說線程池的線程都被父線程所占用時,依舊會發現子任務無法獲得線程執行。shW28資訊網——每日最新資訊28at.com

此處我們修改核心線程為10執行看一下輸出結果。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

通過修改核心線程數量,解決了子任務在隊列中堆積的問題。shW28資訊網——每日最新資訊28at.com

所以通過上述代碼,大家應該知道死鎖是怎么發生的了吧,這里我總結一下。shW28資訊網——每日最新資訊28at.com

六、小結

當核心線程為1,最大線程為1,使用無界隊列。父任務在線程中等待子任務完成的通知,子任務在線程池的任務隊列中等待線程池調度線程資源。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

當核心線程為1,最大線程為n,使用無界隊列。最大線程設置n與設置1沒有區別,除非使用的隊列不同,只要是使用的無界隊列,當資源耗盡之時,就是服務崩潰的時候。此時后面新的父任務到來時,也只會在任務隊列中繼續堆積。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

當核心線程為n,最大線程為n,使用無界隊列。核心線程設置為n,意味著父線程大概率是可以執行的,創建的子任務在任務隊列中排隊執行。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

當并發量上來,或者核心線程都被父任務所占據之后,線程池調用就變成了如下場景,所有的任務都被堆積在任務隊列當中:shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

核心線程全是父任務,后面創建的任務也都在任務隊列堆積,最終達到服務器瓶頸系統OOM。shW28資訊網——每日最新資訊28at.com

七、最終解決方案

通過上述代碼示例,死鎖的根本原因在于,父任務會創建多個子任務,并等待子任務執行結束,而父子任務都是使用的同一個線程池,當線程池中執行線程都是父任務時,所有的子任務又都在任務隊列中等待執行,所以這樣就會發生死鎖。shW28資訊網——每日最新資訊28at.com

核心線程永遠不會釋放,從而造成任務隊列不斷堆積,直到OOM。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

所以解決方案就是,隔離線程池。shW28資訊網——每日最新資訊28at.com

不同的業務使用不同的線程池,使用一個新的線程池處理子任務,這樣就可以避免死鎖的發生了。shW28資訊網——每日最新資訊28at.com

修改之后的代碼如下。shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

shW28資訊網——每日最新資訊28at.com

通過查看日志輸出可以發現,線程池隔離之后,哪怕核心線程設置為1,也是可以正常執行業務邏輯的,任務隊列中也沒有堆積任務。shW28資訊網——每日最新資訊28at.com

八、總結

通過上面的 Demo 復現以及解決方案,在工作中優化建議如下:shW28資訊網——每日最新資訊28at.com

  • 禁止使用Executors創建自定義線程池。使用ThreadPoolExecutor創建線程池時,注意每個參數的含義,規避資源耗盡的風險。
  • 線程池使用有界隊列,避免使用無界隊列。
  • 對于父子任務的場景,可以使用線程池或者 MQ。使用有界隊列之后,制定合理的拒絕策略,拒絕策略可以考慮 MQ 做重試。
  • 不同業務使用不同的線程池,禁止父子任務使用相同的線程池。

本文鏈接:http://m.www897cc.com/showinfo-26-112764-0.html不同業務使用同一個線程池發生死鎖

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python必知必會:15個令人相見恨晚的Python字符串格式化技巧!

下一篇: 玩轉文件權限:Python 的七個權限操作實戰

標簽:
  • 熱門焦點
  • 鴻蒙OS 4.0公測機型公布:甚至連nova6都支持

    華為全新的HarmonyOS 4.0操作系統將于今天下午正式登場,官方在發布會之前也已經正式給出了可升級的機型產品,這意味著這些機型會率先支持升級享用。這次的HarmonyOS 4.0支持
  • K6:面向開發人員的現代負載測試工具

    K6 是一個開源負載測試工具,可以輕松編寫、運行和分析性能測試。它建立在 Go 和 JavaScript 之上,它被設計為功能強大、可擴展且易于使用。k6 可用于測試各種應用程序,包括 Web
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個人開發仿造稿定設計的圖片編輯器到現在,不知不覺已過去一年時間了,期間我經歷了裁員失業、面試找工作碰壁,寒冬下一直沒有很好地履行計劃.....這些就放在日
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當時用的是 GDIView + WinDbg 把問題搞定,前者用來定位泄露資源,后者用來定位泄露代碼,后面有朋友反
  • 每天一道面試題-CPU偽共享

    前言:了不起:又到了每天一到面試題的時候了!學弟,最近學習的怎么樣啊 了不起學弟:最近學習的還不錯,每天都在學習,每天都在進步! 了不起:那你最近學習的什么呢? 了不起學弟:最近在學習C
  • 小紅書1周漲粉49W+,我總結了小白可以用的N條漲粉筆記

    作者:黃河懂運營一條性教育視頻,被54萬人“珍藏”是什么體驗?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬人,為她瘋狂點贊!更瘋狂的是,這
  • 認真聊聊東方甄選:如何告別低垂的果實

    來源:山核桃作者:財經無忌爆火一年后,俞敏洪和他的東方甄選依舊是頗受外界關心的“網紅”。7月5日至9日,為期5天的東方甄選“甘肅行”首次在自有App內直播,
  • OPPO、vivo、小米等國內廠商Q2在印度智能手機市場份額依舊高達55%

    7月20日消息,據外媒報道,研究機構的報告顯示,在全球智能手機出貨量同比仍在下滑的大背景下,印度這一有潛力的市場也未能幸免,出貨量同比也有下滑,多家廠
  • OPPO K11搭載長壽版100W超級閃充:26分鐘充滿100%

    據此前官方宣布,OPPO將于7月25日也就是今天下午14:30舉辦新品發布會,屆時全新的OPPO K11將正式與大家見面,將主打旗艦影像,和同檔位競品相比,其最大的賣
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
午夜精品久久久久久久久久久| 亚洲黄网站在线观看| 欧美午夜一区二区三区免费大片 | 亚洲男人天堂2024| 欧美主播一区二区三区| 麻豆精品视频| 欧美亚州一区二区三区 | 欧美日韩亚洲视频| 国产美女精品一区二区三区 | 亚洲免费成人av| 亚洲永久免费精品| 久久一区免费| 国产精品成人一区二区三区夜夜夜| 国产欧美日韩在线视频| 亚洲福利视频一区二区| 在线视频免费在线观看一区二区| 羞羞视频在线观看欧美| 牛人盗摄一区二区三区视频| 国产精品久久久久婷婷| 在线观看视频一区二区欧美日韩| 一区二区欧美视频| 久久精品在线| 欧美午夜在线一二页| 精品成人久久| 亚洲午夜av| 免费观看在线综合| 国产精品实拍| 日韩网站免费观看| 久久久久久久久久久久久女国产乱| 欧美精品激情| 一区在线影院| 午夜在线观看免费一区| 欧美激情精品久久久久| 国产在线乱码一区二区三区| 一区二区三区.www| 久久在线精品| 国产农村妇女精品一区二区| 亚洲欧洲精品一区二区三区| 久久精精品视频| 国产精品成人v| 亚洲欧洲午夜| 久久久五月天| 国产日韩精品视频一区二区三区| 一本色道久久综合狠狠躁篇怎么玩| 久久久久久久精| 国产女精品视频网站免费| 99av国产精品欲麻豆| 久久综合伊人77777麻豆| 国产精品一区二区你懂的| 亚洲乱码视频| 欧美gay视频| 国产一区高清视频| 亚洲欧美在线免费观看| 欧美天天在线| 亚洲美女av电影| 美女网站在线免费欧美精品| 国产午夜久久| 性欧美暴力猛交另类hd| 国产精品福利网| 中文国产成人精品久久一| 欧美精品日本| 亚洲国产岛国毛片在线| 久久久天天操| 国模精品一区二区三区色天香| 亚洲欧美成人综合| 国产精品久久久久久久久婷婷| 99精品视频免费在线观看| 欧美成人情趣视频| 亚洲韩国精品一区| 欧美成人精品一区二区| 亚洲电影免费观看高清完整版在线观看 | 欧美日韩另类一区| 亚洲人午夜精品免费| 嫩草国产精品入口| 亚洲高清视频一区| 免费成人黄色| 亚洲国产精品成人一区二区 | 亚洲精品一二三| 欧美国产日韩精品| 亚洲精品国久久99热| 欧美国产另类| 亚洲欧洲一区二区在线观看| 欧美r片在线| 亚洲欧洲日韩综合二区| 欧美黄色一区| 夜夜爽www精品| 欧美日韩在线免费视频| 亚洲网站视频福利| 国产精品日韩一区| 欧美一级成年大片在线观看| 国产午夜亚洲精品羞羞网站 | 国产精品入口尤物| 午夜精品久久久久久99热| 国产伦精品免费视频| 欧美在线免费播放| 精品99一区二区三区| 毛片基地黄久久久久久天堂| 在线日本欧美| 欧美日韩大片一区二区三区| 亚洲视频免费在线观看| 国产精品综合久久久| 午夜一区不卡| 怡红院精品视频| 欧美极品在线视频| 99视频在线精品国自产拍免费观看| 欧美日精品一区视频| 亚洲综合精品自拍| 国产综合久久久久久| 蜜桃av一区| 夜夜嗨av一区二区三区| 国产精品美腿一区在线看| 欧美综合国产| 亚洲黄色精品| 欧美性久久久| 久久爱www久久做| 亚洲高清不卡在线| 欧美日韩裸体免费视频| 午夜久久一区| 亚洲国产高清一区二区三区| 欧美日韩一视频区二区| 欧美一区二区三区四区夜夜大片| 极品少妇一区二区三区| 欧美日本在线播放| 午夜在线观看欧美| 亚洲福利在线视频| 国产精品乱看| 狼人社综合社区| 正在播放欧美一区| 黄色亚洲大片免费在线观看| 欧美激情一区二区三区四区| 亚洲夜间福利| 在线免费观看成人网| 欧美视频1区| 久久久夜色精品亚洲| 一区二区三区高清在线观看| 国产亚洲一区二区三区在线观看| 欧美国产成人在线| 性欧美精品高清| 亚洲精品欧美一区二区三区| 国产女人18毛片水18精品| 欧美寡妇偷汉性猛交| 欧美一区二区在线| 日韩一本二本av| 国内精品模特av私拍在线观看| 欧美日本高清| 久久亚洲春色中文字幕| 亚洲一区二区三区色| 在线日韩成人| 国产精品亚洲а∨天堂免在线| 欧美.日韩.国产.一区.二区| 亚洲综合日本| 日韩视频一区二区三区在线播放免费观看| 国产日韩欧美黄色| 欧美日韩一区二区三区在线视频| 久久精品国产视频| 亚洲在线免费| 日韩视频―中文字幕| 国产一区二区三区日韩欧美| 欧美三级免费| 欧美二区在线播放| 久久国内精品视频| 亚洲免费在线视频一区 二区| 亚洲区欧美区| 精品二区视频| 国产伦精品免费视频| 欧美日韩一区二区在线视频| 麻豆成人小视频| 久久精品国产99| 亚洲一区二区三区国产| 亚洲精品欧洲| 亚洲国产高清一区| 国产一区二区0| 国产精品自在线| 国产精品福利网| 欧美日韩一区二区视频在线观看 | 亚洲一区二区三区免费在线观看| 亚洲国产日韩综合一区| 国产综合色一区二区三区| 国产精品美女久久福利网站| 欧美日韩大片| 欧美激情亚洲另类| 鲁鲁狠狠狠7777一区二区| 久久久777| 久久aⅴ乱码一区二区三区| 亚洲在线观看视频| 一本久道久久综合婷婷鲸鱼| 亚洲精品一区二区三区蜜桃久| 一区免费观看| 好吊妞这里只有精品| 国产啪精品视频| 国产精品久久久久久久电影| 欧美日韩免费在线| 欧美剧在线免费观看网站| 欧美国产日韩在线| 欧美福利视频| 毛片av中文字幕一区二区| 久久黄色级2电影| 久久精品电影| 久久久久久亚洲综合影院红桃| 久久狠狠亚洲综合| 久久免费偷拍视频| 久久这里只有精品视频首页| 狂野欧美一区| 免费日本视频一区|