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

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

面試官:聽說你很懂線程池?

來源: 責編: 時間:2024-04-02 17:17:23 239觀看
導讀什么是線程池就是一種池化技術,類似的還有jdbc連接池,對象池。所謂線程池,就是提前創建一堆線程,放到內存(池子)中,需要的時候取一個出來用。如上圖,最頂層的接口就是Executor,實現ExecutorService接口的類,就是對應的線程池類

什么是線程池

就是一種池化技術,類似的還有jdbc連接池,對象池。所謂線程池,就是提前創建一堆線程,放到內存(池子)中,需要的時候取一個出來用。bH228資訊網——每日最新資訊28at.com

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

如上圖,最頂層的接口就是Executor,實現ExecutorService接口的類,就是對應的線程池類。bH228資訊網——每日最新資訊28at.com

如何創建線程池

用Executors工具類,可以很方便地創建各種線程池。(但是實際開發我們不推薦,阿里巴巴的開發手冊嚴令禁止使用Executors,應該用ThreadPoolExecutor)Executors 類可以創建多種類型的線程池,每種線程池都有不同的特點和適用場景。bH228資訊網——每日最新資訊28at.com

(1) FixedThreadPool(固定大小線程池):bH228資訊網——每日最新資訊28at.com

  • 使用 Executors.newFixedThreadPool(int nThreads) 方法創建。
  • 具有固定大小的線程池,即線程數量固定不變。
  • 適用于需要控制線程數量的場景,例如服務器端處理請求。

(2) CachedThreadPool(緩存線程池):bH228資訊網——每日最新資訊28at.com

  • 使用 Executors.newCachedThreadPool() 方法創建。
  • 具有自動調整線程數量的線程池,根據需要創建新線程,空閑線程會被回收。
  • 適用于執行大量短期異步任務的場景,例如異步IO操作。

(3) SingleThreadPool(單線程線程池):bH228資訊網——每日最新資訊28at.com

  • 使用 Executors.newSingleThreadExecutor() 方法創建。
  • 只有一個工作線程的線程池,所有任務按順序執行。
  • 適用于需要保證順序執行的任務場景,例如日志處理。

(4) ScheduledThreadPool(定時任務線程池):bH228資訊網——每日最新資訊28at.com

  • 使用 Executors.newScheduledThreadPool(int corePoolSize) 方法創建。
  • 具有定時執行任務的功能,可以按固定的頻率執行任務。
  • 適用于需要定時執行任務的場景,例如定時任務調度。

(5) WorkStealingPool(工作竊取線程池):bH228資訊網——每日最新資訊28at.com

  • 使用 Executors.newWorkStealingPool(int parallelism) 方法創建。
  • 基于ForkJoinPool實現的線程池,每個線程都有自己的任務隊列,可以竊取其他線程的任務來執行。
  • 適用于需要處理大量并行任務的場景,例如并行計算任務。

為什么不推薦用Executors創建?bH228資訊網——每日最新資訊28at.com

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

線程池底層原理

我們以ThreadPoolExecutor為例,它是ExecutorService的一種實現。bH228資訊網——每日最新資訊28at.com

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

一般我們根據一個類的構造器,可以看出里面的大致思路:bH228資訊網——每日最新資訊28at.com

public ThreadPoolExecutor(int corePoolSize,                              int maximumPoolSize,                              long keepAliveTime,                              TimeUnit unit,                              BlockingQueue<Runnable> workQueue,                              ThreadFactory threadFactory,                              RejectedExecutionHandler handler) {        if (corePoolSize < 0 ||            maximumPoolSize <= 0 ||            maximumPoolSize < corePoolSize ||            keepAliveTime < 0)            throw new IllegalArgumentException();        if (workQueue == null || threadFactory == null || handler == null)            throw new NullPointerException();        this.corePoolSize = corePoolSize;        this.maximumPoolSize = maximumPoolSize;        this.workQueue = workQueue;        this.keepAliveTime = unit.toNanos(keepAliveTime);        this.threadFactory = threadFactory;        this.handler = handler;    }

參數很多,但是我們每一個都必須要記住。 這個 ThreadPoolExecutor 的構造函數接受以下參數:一個線程池就好比一家公司,甲方員工干不完需求的時候,就要招一些外包人員駐場開發,如果活干完了,就讓外包撤場,只留下自己的員工。bH228資訊網——每日最新資訊28at.com

  • corePoolSize(核心線程數):線程池中保持活躍的線程數量,即使它們處于空閑狀態。當提交任務時,線程池會嘗試保持至少這么多數量的線程處于活躍狀態。 就是公司正式員工的數量。
  • maximumPoolSize(最大線程數):線程池中允許的最大線程數量。當任務隊列已滿且核心線程都處于活躍狀態時,線程池會創建新的線程,直到達到這個最大線程數。 就是公司甲方員工+外包員工的總數,不能超過這個數量。
  • keepAliveTime(線程空閑時間):非核心線程在空閑狀態下的最長存活時間。超過這個時間,多余的非核心線程將被終止,直到線程數量不超過核心線程數。 如果外包員工長時間沒需求,就通知乙方撤人,裁掉這個非核心人員。當然,甲方爸爸是不會裁的。
  • unit(時間單位):用于指定 keepAliveTime 參數的時間單位,通常是秒、毫秒、微秒等。
  • workQueue(工作隊列):用于保存等待執行的任務的阻塞隊列。當所有線程都處于忙碌狀態時,新提交的任務會被放入這個隊列中等待執行。 當需求多到加上外包員工都做不完了,就只能往后排期了。
  • threadFactory(線程工廠):用于創建新線程的工廠。每個新創建的線程都是通過這個工廠創建的。** 就是定義員工的屬性,即工牌,這個員工屬于哪個公司的。**
  • handler(拒絕策略):當任務無法被執行時(通常是由于線程池已關閉或者任務隊列已滿),用于處理被拒絕的任務的策略。常見的拒絕策略包括拋出異常、丟棄任務或者在調用者線程中執行任務。 默認是不處理。

這些參數可以用于配置 ThreadPoolExecutor 對象,以滿足不同的線程管理需求。bH228資訊網——每日最新資訊28at.com

線程池本質就是一個HashSet,所以是無序的。有新的任務提交進來,如果池子還有線程,就直接拿去處理,池子滿了就放入阻塞隊列,等待有線程空閑。bH228資訊網——每日最新資訊28at.com

線程數怎么設置比較合理?

這個是沒有銀彈的,我們一般認為CPU密集型的應用,設置為CPU核數N+1。所謂CPU密集型,就是這個程序計算量比較多,還比較頻繁,計算時間長,也就是所謂的比較吃配置,比如是一個專門做算法的服務(組托,配載運算之類的)。 bH228資訊網——每日最新資訊28at.com

對于IO密集型的應用,設置為2N+1,什么是IO密集型的應用呢,就是提供數據服務比較多,吞吐量比較大,等待時間長的應用,大部分業務系統都屬于此類。bH228資訊網——每日最新資訊28at.com

除此之外,線程數還跟jvm,機器cpu是否可以超線程(云服務器一般沒法超線程),我們看到的cpu核數一般不是真實的,所以我們推薦先根據常規設置一個線程數量,上線后根據具體情況再調整就行了。bH228資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-80831-0.html面試官:聽說你很懂線程池?

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

上一篇: 千人規模敏捷迭代實踐分享,你學會了嗎?

下一篇: JSDoc:一個可選的 TypeScript 替代品

標簽:
  • 熱門焦點
  • K60 Pro官方停產 第三方瞬間漲價

    雖然沒有官方宣布,但Redmi的一些高管也已經透露了,Redmi K60 Pro已經停產且不會補貨,這一切都是為了即將到來的K60 Ultra鋪路,屬于廠家的正常操作。但有意思的是該機在停產之后
  • Redmi Buds 4開箱簡評:才199還有降噪 可以無腦入

    在上個月舉辦的Redmi Note11T Pro系列新機發布會上,除了兩款手機新品之外,Redmi還帶來了兩款TWS真無線藍牙耳機產品,Redmi Buds 4和Redmi Buds 4 Pro,此前我們在Redmi Note11T
  • 6月iOS設備性能榜:M2穩居榜首 A系列只能等一手3nm來救

    沒有新品發布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發布節奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • Raft算法:保障分布式系統共識的穩健之道

    1. 什么是Raft算法?Raft 是英文”Reliable、Replicated、Redundant、And Fault-Tolerant”(“可靠、可復制、可冗余、可容錯”)的首字母縮寫。Raft算法是一種用于在分布式系統
  • 把LangChain跑起來的三個方法

    使用LangChain開發LLM應用時,需要機器進行GLM部署,好多同學第一步就被勸退了,那么如何繞過這個步驟先學習LLM模型的應用,對Langchain進行快速上手?本片講解3個把LangChain跑起來
  • .NET 程序的 GDI 句柄泄露的再反思

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

    你是否在遇到過這樣的問題:移動設備上有一個固定元素,當激活虛擬鍵盤時,該元素被隱藏在了鍵盤下方?多年來,這一直是 Web 上的默認行為,在本文中,我們將探討這個問題、為什么會發生
  • 使用Webdriver-manager解決瀏覽器與驅動不匹配所帶來自動化無法執行的問題

    1、前言在我們使用 Selenium 進行 UI 自動化測試時,常常會因為瀏覽器驅動與瀏覽器版本不匹配,而導致自動化測試無法執行,需要手動去下載對應的驅動版本,并替換原有的驅動,可能還
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
久久国产精品99国产| 亚洲精品美女久久7777777| 国产精品久久久久91| 国产精品性做久久久久久| 国产视频在线观看一区| 韩国精品主播一区二区在线观看| 在线精品福利| 一本久久综合亚洲鲁鲁五月天| 亚洲一区日韩| 久久综合久久美利坚合众国| 欧美另类在线播放| 欧美日韩国产高清视频| 国产欧美日韩精品a在线观看| 尤物精品在线| 一区二区欧美日韩视频| 欧美中日韩免费视频| 欧美国产专区| 国产欧美日韩在线播放| 亚洲国产乱码最新视频| 亚洲一区二区三区精品在线| 久久久久久久999精品视频| 欧美伦理影院| 亚洲天堂黄色| 久久成人免费| 欧美日本韩国一区| 国产一区二区三区四区| 国产乱码精品1区2区3区| 亚洲电影网站| 在线观看日韩国产| 亚洲一区二区三区四区视频 | 亚洲一区二区综合| 鲁大师影院一区二区三区| 久久亚洲二区| 免费亚洲一区二区| 国产精品视频你懂的| 亚洲国产裸拍裸体视频在线观看乱了中文 | 好男人免费精品视频| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲免费在线观看视频| 麻豆精品在线播放| 国产精品一区在线播放| 亚洲伦理久久| 另类av导航| 国产日韩精品视频一区| 一区二区日韩免费看| 蜜桃精品久久久久久久免费影院| 久久精品日产第一区二区| 欧美刺激午夜性久久久久久久| 国产情人节一区| 一区二区三区视频在线观看| 欧美mv日韩mv国产网站app| 国产亚洲精品aa午夜观看| 亚洲一级二级| 久久av在线看| 国产精品久久久久一区二区三区共| 亚洲精品国产无天堂网2021| 久久一区二区三区四区| 欧美精品一区二区三区一线天视频| 国产在线精品成人一区二区三区 | 欧美在线综合| 国产精品视频999| 一区二区三区蜜桃网| 欧美激情精品久久久久久大尺度 | 国产亚洲福利社区一区| 亚洲一区影院| 欧美深夜福利| 一本久道久久久| 欧美精品激情在线| 亚洲人成在线播放网站岛国| 两个人的视频www国产精品| 国语自产精品视频在线看8查询8| 欧美一区午夜精品| 国产亚洲欧美激情| 在线观看不卡av| 久久精品一区蜜桃臀影院| 国产日韩欧美三区| 欧美在线1区| 国产一区二区精品丝袜| 羞羞答答国产精品www一本| 国产精品视频一区二区三区| 亚洲欧美日本国产专区一区| 国产精品久久久久一区| 亚洲专区在线| 国产欧美精品va在线观看| 午夜一区不卡| 欧美乱大交xxxxx| 欧美日韩精品在线播放| 国产视频欧美视频| 亚洲欧美精品一区| 国产嫩草影院久久久久| 亚洲人成网站在线观看播放| 欧美bbbxxxxx| 亚洲精品中文字幕在线观看| 欧美日韩1080p| 亚洲素人在线| 国产精品专区h在线观看| 欧美一区三区三区高中清蜜桃| 欧美理论在线| 一区二区三区精品视频| 欧美三区在线视频| 91久久精品国产91久久性色tv| 欧美风情在线| 一本大道久久a久久综合婷婷| 欧美日韩中文另类| 亚洲欧美日韩在线综合| 国产日韩一区二区| 久久综合久久久| 日韩午夜av| 国产精品一区二区久久久久| 久久久97精品| 亚洲精品色婷婷福利天堂| 欧美视频专区一二在线观看| 亚洲欧美日韩综合aⅴ视频| 韩国av一区二区三区| 欧美乱妇高清无乱码| 先锋影音国产精品| 国产精品久久精品日日| 性伦欧美刺激片在线观看| 一区二区亚洲精品国产| 欧美精品一区二| 亚洲天堂av在线免费观看| 国产亚洲精品7777| 欧美黑人在线观看| 亚洲欧美在线观看| 亚洲第一网站免费视频| 欧美新色视频| 玖玖玖国产精品| 亚洲视频在线免费观看| 国产日韩精品一区二区三区| 免费不卡中文字幕视频| 亚洲视频一区二区在线观看| 国内在线观看一区二区三区| 欧美日本精品| 久久精品国产清高在天天线 | 一区在线电影| 欧美午夜视频网站| 久久亚裔精品欧美| 国产一区二区久久精品| 欧美xx69| 亚洲精品乱码久久久久久| 国产精品欧美日韩一区| 麻豆国产精品777777在线| 亚洲一区二区日本| 国产精品久久国产三级国电话系列| 久久精品国产免费看久久精品| 一本久道综合久久精品| 黑人巨大精品欧美一区二区| 欧美午夜激情在线| 蜜桃av噜噜一区| 午夜精品福利在线观看| 亚洲伦伦在线| 黄色av日韩| 国产精品视频999| 欧美激情亚洲视频| 亚洲手机视频| 亚洲国产精品黑人久久久| 国产麻豆精品在线观看| 欧美片第一页| 麻豆精品视频在线| 欧美亚洲免费高清在线观看| 日韩视频二区| 亚洲国产裸拍裸体视频在线观看乱了中文| 国产精品色一区二区三区| 欧美成人在线免费观看| 久久精品91| 亚洲欧美清纯在线制服| 日韩视频在线一区二区三区| 精品91久久久久| 国产日本亚洲高清| 国产精品v欧美精品v日韩精品| 欧美一区二区三区久久精品茉莉花| 亚洲区一区二区三区| 一区二区在线观看av| 国产日韩欧美另类| 国产精品成人在线观看| 欧美激情bt| 欧美aaaaaaaa牛牛影院| 久久久夜夜夜| 久久精品视频va| 欧美一区二区视频网站| 亚洲欧美日韩成人| 国产精品99久久久久久久vr| 日韩图片一区| 亚洲另类在线一区| 亚洲精品国产精品国产自| 亚洲国产高清在线| 在线欧美福利| 亚洲电影第1页| 亚洲二区在线| 亚洲国产欧美不卡在线观看| 激情懂色av一区av二区av| 国产亚洲精品v| 国产啪精品视频| 国产农村妇女精品一二区| 国产精品丝袜91| 国产精品免费一区豆花| 欧美天堂亚洲电影院在线播放| 欧美日韩国产a| 欧美日韩日韩| 欧美性猛交视频| 国产精品黄页免费高清在线观看| 欧美视频不卡| 国产精品最新自拍| 国产日韩精品视频一区|