日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

简单易懂,ThreadPoolExecutor参数说明

發布時間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 简单易懂,ThreadPoolExecutor参数说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、ThreadPoolExecutor核心參數說明

1、corePoolSize:核心線程數* 核心線程會一直存活,及時沒有任務需要執行* 當線程數小于核心線程數時,即使有線程空閑,線程池也會優先創建新線程處理* 設置allowCoreThreadTimeout=true(默認false)時,核心線程會超時關閉2、queueCapacity:任務隊列容量(阻塞隊列)* 當核心線程數達到最大時,新任務會放在隊列中排隊等待執行3、maxPoolSize:最大線程數* 當線程數>=corePoolSize,且任務隊列已滿時。線程池會創建新線程來處理任務* 當線程數=maxPoolSize,且任務隊列已滿時,線程池會拒絕處理任務而拋出異常4、 keepAliveTime:線程空閑時間* 當線程空閑時間達到keepAliveTime時,線程會退出,直到線程數量=corePoolSize* 如果allowCoreThreadTimeout=true,則會直到線程數量=05、allowCoreThreadTimeout:允許核心線程超時6、rejectedExecutionHandler:任務拒絕處理器* 兩種情況會拒絕處理任務:- 當線程數已經達到maxPoolSize,切隊列已滿,會拒絕新任務- 當線程池被調用shutdown()后,會等待線程池里的任務執行完畢,再shutdown。如果在調用shutdown()和線程池真正shutdown之間提交任務,會拒絕新任務* 線程池會調用rejectedExecutionHandler來處理這個任務。如果沒有設置默認是AbortPolicy,會拋出異常* ThreadPoolExecutor類有幾個內部實現類來處理這類情況:- AbortPolicy 丟棄任務,拋運行時異常- CallerRunsPolicy 執行任務- DiscardPolicy 忽視,什么都不會發生- DiscardOldestPolicy 從隊列中踢出最先進入隊列(最后一個執行)的任務* 實現RejectedExecutionHandler接口,可自定義處理器

二、ThreadPoolExecutor執行順序

線程池按以下行為執行任務1. 當線程數小于核心線程數時,創建線程。2. 當線程數大于等于核心線程數,且任務隊列未滿時,將任務放入任務隊列。3. 當線程數大于等于核心線程數,且任務隊列已滿-1 若線程數小于最大線程數,創建線程-2 若線程數等于最大線程數,拋出異常,拒絕任務

三、ThreadPoolExecutor如何設置參數

1、默認值* corePoolSize=1* queueCapacity=Integer.MAX_VALUE* maxPoolSize=Integer.MAX_VALUE* keepAliveTime=60s* allowCoreThreadTimeout=false* rejectedExecutionHandler=AbortPolicy()2、如何來設置* 需要根據幾個值來決定- tasks :每秒的任務數,假設為1000- taskcost:每個任務花費時間,假設為0.1s- responsetime:系統允許容忍的最大響應時間,假設為1s* 做幾個計算- corePoolSize = 每秒需要多少個線程處理? * 一顆CPU核心同一時刻只能執行一個線程,然后操作系統切換上下文,核心開始執行另一個線程的代碼,以此類推,超過cpu核心數,就會放入隊列,如果隊列也滿了,就另起一個新的線程執行,所有推薦:corePoolSize = ((cpu核心數 * 2) + 有效磁盤數),java可以使用Runtime.getRuntime().availableProcessors()獲取cpu核心數- queueCapacity = (coreSizePool/taskcost)*responsetime* 計算可得 queueCapacity = corePoolSize/0.1*1。意思是隊列里的線程可以等待1s,超過了的需要新開線程來執行* 切記不能設置為Integer.MAX_VALUE,這樣隊列會很大,線程數只會保持在corePoolSize大小,當任務陡增時,不能新開線程來執行,響應時間會隨之陡增。- maxPoolSize = (max(tasks)- queueCapacity)/(1/taskcost)* 計算可得 maxPoolSize = (1000-corePoolSize)/10,即(每秒并發數-corePoolSize大小) / 10* (最大任務數-隊列容量)/每個線程每秒處理能力 = 最大線程數- rejectedExecutionHandler:根據具體情況來決定,任務不重要可丟棄,任務重要則要利用一些緩沖機制來處理- keepAliveTime和allowCoreThreadTimeout采用默認通常能滿足 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的简单易懂,ThreadPoolExecutor参数说明的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。