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

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

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

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

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

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

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

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

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

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

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

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

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

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

newSingleThreadExecutor

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

newFixedThreadPool

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

newCachedThreadPool

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

newScheduleThreadPool

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

標簽:
  • 熱門焦點
  • 十個可以手動編寫的 JavaScript 數組 API

    JavaScript 中有很多API,使用得當,會很方便,省力不少。 你知道它的原理嗎? 今天這篇文章,我們將對它們進行一次小總結。現在開始吧。1.forEach()forEach()用于遍歷數組接收一參
  • K8S | Service服務發現

    一、背景在微服務架構中,這里以開發環境「Dev」為基礎來描述,在K8S集群中通常會開放:路由網關、注冊中心、配置中心等相關服務,可以被集群外部訪問;圖片對于測試「Tes」環境或者
  • 得物效率前端微應用推進過程與思考

    一、背景效率工程隨著業務的發展,組織規模的擴大,越來越多的企業開始意識到協作效率對于企業團隊的重要性,甚至是決定其在某個行業競爭中突圍的關鍵,是企業長久生存的根本。得物
  • 讓我們一起聊聊文件的操作

    文件【1】文件是什么?文件是保存數據的地方,是數據源的一種,比如大家經常使用的word文檔、txt文件、excel文件、jpg文件...都是文件。文件最主要的作用就是保存數據,它既可以保
  • Temu起訴SHEIN,跨境電商戰事升級

    來源 | 伯虎財經(bohuFN)作者 | 陳平安日前據外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 華為Mate60系列模具曝光:采用碩大圓形后置相機模組+拼接配色方案

    據此前多方爆料,今年華為將開始恢復一年雙旗艦戰略,除上半年推出的P60系列外,往年下半年的Mate系列也將迎來更新,有望在9-10月份帶來全新的華為Mate60
  • 三星推出Galaxy Tab S9系列平板電腦以及Galaxy Watch6系列智能手表

    2023年7月26日,三星電子正式發布了Galaxy Z Flip5與Galaxy Z Fold5。除此之外,Galaxy Tab S9系列平板電腦以及三星Galaxy Watch6系列智能手表也同期
  • 與兆芯合作 聯想推出全新旗艦版筆記本電腦開天N7系列

    聯想與兆芯合作推出全新聯想旗艦版筆記本電腦開天 N7系列。這個系列采用兆芯KX-6640MA處理器平臺,KX-6640MA 處理器是采用了陸家嘴架構,16nm 工藝,4 核 4 線
Top