最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

源碼專欄-ThreadPoolExecutor

2023-03-05 09:44 作者:nickHHH233  | 我要投稿
  1. ctl狀態(tài)為什么要用 移位運算 -1 << COUNT_BITS; ctl這個AtomicInteger類型,是對線程池的運行狀態(tài)和線程池中有效線程的數(shù)量進行控制的一個字段, 它同時包含兩部分的信息:線程池的運行狀態(tài) (runState) 和線程池內(nèi)有效線程的數(shù)量 (workerCount),高3位保存runState,低29位保存workerCount,兩個變量之間互不干擾。用一個變量去存儲兩個值,可避免在做相關(guān)決策時,出現(xiàn)不一致的情況,不必為了維護兩者的一致,而占用鎖資源。通過閱讀線程池源代碼也可以發(fā)現(xiàn),經(jīng)常出現(xiàn)要同時判斷線程池運行狀態(tài)和線程數(shù)量的情況。線程池也提供了若干方法去供用戶獲得線程池當(dāng)前的運行狀態(tài)、線程個數(shù)。這里都使用的是位運算的方式,相比于基本運算,速度也會快很多。

  2. private static int workerCountOf(int c) { return c & CAPACITY; } 直接ctl設(shè)置1、2、3 然后返回變量不行嗎

  3. 如果有異常怎么處理 分情況 如果是submit提交任務(wù)的會被FutureTask吞掉,如果是execute提交的會拋出異常,同時會進行異常work退出處理,先從works移掉當(dāng)前的work,然后創(chuàng)建一個新的works

  4. 數(shù)量怎么統(tǒng)計呢,線程池沒有專門變量去存儲當(dāng)前最大核心數(shù),最大線程數(shù),都是用一個變量ctl來獲取當(dāng)前線程數(shù)

  5. 美團是怎么獲取到當(dāng)前的最大核心線程池數(shù)的?最大線程池數(shù),這個沒意義啊,如果要改變核心線程數(shù),直接通過setCorePoolSize來設(shè)置就好了,這個會比較當(dāng)前線程池數(shù)是否小于剛剛設(shè)置的核心線程數(shù),如果小于for循環(huán)創(chuàng)建work,如果大于則中斷,只是中斷并沒有減少work,美團是怎么實現(xiàn)的??

  6. showdown和showdonwNow有什么區(qū)別 生產(chǎn)上一般使用showdownNow,showdownNow會處理當(dāng)前還在工作隊列的任務(wù),處理完后才關(guān)閉,但showdown不會直接關(guān)閉所有線程,情況工作隊列

  1. 怎么處理空閑線程,調(diào)整狀態(tài),每個線程執(zhí)行時都會再一個死循環(huán)里面遍歷工作隊列,判斷當(dāng)前線程數(shù)是否小于核心線程數(shù),如果小于則表示目前所有的都是核心線程,那么通過阻塞隊列take方法阻塞直到有新的任務(wù),如果大于核心線程數(shù),并且設(shè)置存活時間,通過poll只要從隊列獲取任務(wù)超過這個存活時間還沒有獲取到任務(wù),就會進入processWorkerExit來調(diào)整狀態(tài),減少work數(shù)量,然后判斷當(dāng)前線程數(shù)是否小于核心線程數(shù),如果小于則增加work,如果大于則不管跳過

這篇文章寫的不錯,可以多看看 https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html

相關(guān)面試題 https://mp.weixin.qq.com/s/AVtbsVwNH97goImfUDaouw

本文使用 文章同步助手 同步

源碼專欄-ThreadPoolExecutor的評論 (共 條)

分享到微博請遵守國家法律
绥芬河市| 祁东县| 瑞丽市| 通化市| 临清市| 巴彦县| 石台县| 新巴尔虎右旗| 张家港市| 哈尔滨市| 江安县| 成安县| 通州市| 阳城县| 绥中县| 禹州市| 卢湾区| 长阳| 齐齐哈尔市| 广宗县| 营口市| 巴东县| 靖安县| 永新县| 太保市| 苍梧县| 梧州市| 金寨县| 景洪市| 海门市| 任丘市| 凉城县| 益阳市| 麦盖提县| 岳普湖县| 辉南县| 封开县| 项城市| 邹城市| 丰城市| 福鼎市|