AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

四種常見線程池的原理,你學會了嗎?

來源: 責編: 時間:2023-10-30 17:24:14 278觀看
導讀newFixedThreadPool (固定數目線程的線程池)newCachedThreadPool (可緩存線程的線程池)newSingleThreadExecutor (單線程的線程池)newScheduledThreadPool (定時及周期執行的線程池)前三種線程池的構造直接調用Thread

newFixedThreadPool (固定數目線程的線程池)nCE28資訊網——每日最新資訊28at.com

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

newCachedThreadPool (可緩存線程的線程池)nCE28資訊網——每日最新資訊28at.com

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

newSingleThreadExecutor (單線程的線程池)nCE28資訊網——每日最新資訊28at.com

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

newScheduledThreadPool (定時及周期執行的線程池)nCE28資訊網——每日最新資訊28at.com

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

前三種線程池的構造直接調用ThreadPoolExecutor的構造方法。nCE28資訊網——每日最新資訊28at.com

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

newSingleThreadExecutor

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

public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {  return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1, 1,0L,TimeUnit.MILLISECONDS,  	new LinkedBlockingQueue<Runnable>(),threadFactory));}

線程池特點:nCE28資訊網——每日最新資訊28at.com

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

核心線程數:1nCE28資訊網——每日最新資訊28at.com

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

最大線程數:1nCE28資訊網——每日最新資訊28at.com

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

阻塞隊列是無界隊列LinkedBlockingQueue,可能會導致OOMnCE28資訊網——每日最新資訊28at.com

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

keepAliveTime:0nCE28資訊網——每日最新資訊28at.com

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

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

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

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

工作流程:nCE28資訊網——每日最新資訊28at.com

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

1、提交任務nCE28資訊網——每日最新資訊28at.com

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

2、線程池是否有一條線程在,如果沒有,新建線程執行任務nCE28資訊網——每日最新資訊28at.com

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

3、如果有,將任務加到阻塞隊列nCE28資訊網——每日最新資訊28at.com

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

4、當前的唯一線程,從隊列取任務,執行完一個,再繼續,一個線程執行任務nCE28資訊網——每日最新資訊28at.com

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

適用場景:nCE28資訊網——每日最新資訊28at.com

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

適用于串行執行任務的場景,一個任務一個任務地執行nCE28資訊網——每日最新資訊28at.com

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

newFixedThreadPool

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

public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) {  return new ThreadPoolExecutor(nThreads, nThreads,0L,TimeUnit.MILLISECONDS,  	new LinkedBlockingQueue<Runnable>(), threadFactory);}

線程池特點:nCE28資訊網——每日最新資訊28at.com

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

核心線程數和最大線程數大小一樣;nCE28資訊網——每日最新資訊28at.com

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

沒有所謂的非空閑時間,即keepAliveTime為0;nCE28資訊網——每日最新資訊28at.com

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

阻塞隊列為無界隊列LinkedBlockingQueue,可能會導致OOM;nCE28資訊網——每日最新資訊28at.com

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


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

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

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

工作流程:nCE28資訊網——每日最新資訊28at.com

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

1、提交任務;nCE28資訊網——每日最新資訊28at.com

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

2、如果線程數少于核心線程,創建核心線程執行任務;nCE28資訊網——每日最新資訊28at.com

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

3、如果線程數等于核心線程,把任務添加到LinkedBlockingQueue阻塞隊列;nCE28資訊網——每日最新資訊28at.com

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

4、如果線程執行完任務,去阻塞隊列取任務,繼續執行。nCE28資訊網——每日最新資訊28at.com

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

適用場景:nCE28資訊網——每日最新資訊28at.com

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

FixedThreadPool適用于處理CPU密集型的任務,確保CPU在長期被工作線程使用的情況下,盡可能少的分配線程,即適用執行長期的任務。nCE28資訊網——每日最新資訊28at.com

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

newCachedThreadPool

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

public static ExecutorService newCachedThreadPool(ThreadFactory threadFactory) {  return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS,  	new SynchronousQueue<Runnable>(), threadFactory);}

線程池特點:nCE28資訊網——每日最新資訊28at.com

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

核心線程數為0;nCE28資訊網——每日最新資訊28at.com

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

最大線程數為Integer.MAX_VALUE,即無限大,可能會因為無線創建線程,導致OOMnCE28資訊網——每日最新資訊28at.com

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

阻塞隊列是SynchronousQueuenCE28資訊網——每日最新資訊28at.com

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

非核心線程空閑存活時間為60snCE28資訊網——每日最新資訊28at.com

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

當提交任務速度大于處理任務的速度時,每次提交一個任務,就必然會創建一個線程。nCE28資訊網——每日最新資訊28at.com

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

極端情況下會創建過多的線程,耗盡CPU和內存資源。由于空閑60秒的線程會被終止,長時間保持空閑的CachedThreadPool不會占用任何資源。nCE28資訊網——每日最新資訊28at.com

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


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

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

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

工作流程:nCE28資訊網——每日最新資訊28at.com

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

提交任務;nCE28資訊網——每日最新資訊28at.com

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

因為沒有核心線程,所以任務會直接加到SynchronousQueue隊列;nCE28資訊網——每日最新資訊28at.com

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

判斷是否有空閑線程,如果有,就去取出任務執行;nCE28資訊網——每日最新資訊28at.com

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

如果沒有空閑線程,就新建一個線程執行;nCE28資訊網——每日最新資訊28at.com

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

執行完任務的線程,還可以存活60s,如果在這期間接到任務,就可以繼續活下去,否則被銷毀。nCE28資訊網——每日最新資訊28at.com

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

適用場景:nCE28資訊網——每日最新資訊28at.com

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

用于并發執行大量短期的小任務。nCE28資訊網——每日最新資訊28at.com

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

newScheduleThreadPool

public ScheduledThreadPoolExecutor(int corePoolSize) {  super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS, new DelayedWorkQueue());}

線程池特點:nCE28資訊網——每日最新資訊28at.com

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

最大線程數為Integer.MAX_VALUE,也有OOM風險nCE28資訊網——每日最新資訊28at.com

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

阻塞隊列是DelayedWorkQueuenCE28資訊網——每日最新資訊28at.com

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

keepAliveTime為0nCE28資訊網——每日最新資訊28at.com

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

scheduleAtFixedRate():按某種速率周期執行nCE28資訊網——每日最新資訊28at.com

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

scheduleWithFixedDelay():在某個延遲后執行nCE28資訊網——每日最新資訊28at.com

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

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

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

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

工作機制:nCE28資訊網——每日最新資訊28at.com

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

線程從DelayQueue中獲取已到期的ScheduledFutureTask(DelayQueue.take())。到期任務是指ScheduledFutureTask的time大于等于當前時間。nCE28資訊網——每日最新資訊28at.com

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

線程執行這個ScheduleFutureTasknCE28資訊網——每日最新資訊28at.com

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

線程修改ScheduledFutureTask的time變量為下次將要被執行的時間nCE28資訊網——每日最新資訊28at.com

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

線程把這個修改time之后的ScheduledFutureTask放回DelayQueue中(DelayQueue.add())。nCE28資訊網——每日最新資訊28at.com

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


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

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

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

使用場景:nCE28資訊網——每日最新資訊28at.com

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

周期性執行任務的場景,需要限制線程數量的場景。nCE28資訊網——每日最新資訊28at.com

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

使用無界隊列的線程池會導致什么問題:nCE28資訊網——每日最新資訊28at.com

例如newFixedThreadPool使用了無界的阻塞隊列LinkedBlockingQueue,如果線程獲取一個任務后,任務的執行時間比較長,會導致隊列的任務越積越多,導致機器內存使用不停飆升,最終導致OOM。nCE28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-15863-0.html四種常見線程池的原理,你學會了嗎?

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

上一篇: 使用Frida在Windows中攔截C++函數

下一篇: Kubernetes使用OkHttp客戶端進行網絡負載均衡

標簽:
  • 熱門焦點
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區總裁李杰發布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • K60至尊版狂暴引擎2.0加持:超177萬跑分斬獲性能第一

    Redmi的后性能時代戰略發布會今天下午如期舉辦,在本次發布會上,Redmi公布了多項關于和聯發科的深度合作,以及新機K60 Ultra在軟件和硬件方面的特性,例如:“K60 至尊版,雙芯旗艦
  • 容量越大越不壞?24萬塊硬盤故障率報告公布 這些產品零故障

    8月5日消息,云存儲服務商Backblaze發布了最新的硬盤故障率報告,年故障率有所上升。Backblaze發布的硬盤季度統計數據,其中包括故障率等重要方面。這些結
  • CSS單標簽實現轉轉logo

    轉轉品牌升級后更新了全新的Logo,今天我們用純CSS來實現轉轉的新Logo,為了有一定的挑戰性,這里我們只使用一個標簽實現,將最大化的使用CSS能力完成Logo的繪制與動畫效果。新logo
  • 一年經驗在二線城市面試后端的經驗分享

    忠告這篇文章只適合2年內工作經驗、甚至沒有工作經驗的朋友閱讀。如果你是2年以上工作經驗,請果斷劃走,對你沒啥幫助~主人公這篇文章內容來自 「升職加薪」星球星友 的投稿,坐
  • 一個注解實現接口冪等,這樣才優雅!

    場景碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:圖片上述代碼有
  • 2023年,我眼中的字節跳動

    此時此刻(2023年7月),字節跳動從未上市,也從未公布過任何官方的上市計劃;但是這并不妨礙它成為中國最受關注的互聯網公司之一。從2016-17年的抖音強勢崛起,到2018年的&ldquo;頭騰
  • AI芯片初創公司Tenstorrent獲三星和現代1億美元投資

    Tenstorrent是一家由芯片行業資深人士Jim Keller領導的加拿大初創公司,專注于開發人工智能芯片,該公司周三表示,已經從現代汽車集團和三星投資基金等
  • 朋友圈可以修改可見范圍了 蘋果用戶可率先體驗

    近日,iOS用戶迎來微信8.0.27正式版更新,除了可更換二維碼背景外,還新增了多項實用功能。在新版微信中,朋友圈終于可以修改可見范圍,簡單來說就是已發布的朋友圈
Top