中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

線程池有哪些經典面試題

發布時間:2020-07-31 17:05:08 來源:億速云 閱讀:299 作者:Leah 欄目:編程語言

這篇文章將為大家詳細講解有關線程池有哪些經典面試題,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

面試題1:使用線程池有哪些好處?

答案:降低資源消耗,通過重復利用已創建的線程,降低線程創建和銷毀造成的消耗;提高響應速度,當任務到達時,任務可以不需要等到線程創建就能立即執行;增加線程的可管理型,線程是稀缺資源,使用線程池可以進行統一分配,調優和監控。

面試題2:概述一下線程池的核心屬性。

答案:

1)線程工廠:用于創建工作線程的工廠。

2)核心線程數:當線程池運行的線程少于 corePoolSize 時,將創建一個新線程來處理請求,即使其他工作線程處于空閑狀態。

3)隊列:用于保留任務并移交給工作線程的阻塞隊列。

4)最大線程數:線程池允許開啟的最大線程數。

5)拒絕策略:往線程池添加任務時,將在下面兩種情況觸發拒絕策略:一是線程池運行狀態不是 RUNNING;二是線程池已經達到最大線程數,并且阻塞隊列已滿時。

6)保持存活時間:如果線程池當前線程數超過 corePoolSize,則多余的線程空閑時間超過 keepAliveTime 時會被終止。

面試題3:線程池有哪些狀態?分別描述一下。

答案:

1RUNNING:接受新任務并處理排隊的任務。

2SHUTDOWN:不接受新任務,但處理排隊的任務。

3STOP:不接受新任務,不處理排隊的任務,并中斷正在進行的任務。

4TIDYING:所有任務都已終止,workerCount 為零,線程轉換到 TIDYING 狀態將運行 terminated() 鉤子方法。

5TERMINATEDterminated() 已完成。

 

面試題4:線程池有哪些常見的阻塞隊列?使用時要注意什么?

答案:

1ArrayBlockingQueue:基于數組結構的有界阻塞隊列,按先進先出對元素進行排序。

2LinkedBlockingQueue:基于鏈表結構的有界/無界阻塞隊列,按先進先出對元素進行排序,吞吐量通常高于 ArrayBlockingQueueExecutors.newFixedThreadPool 使用了該隊列。

3SynchronousQueue:不是一個真正的隊列,而是一種在線程之間移交的機制。要將一個元素放入 SynchronousQueue 中,必須有另一個線程正在等待接受這個元素。如果沒有線程等待,并且線程池的當前大小小于最大值,那么線程池將創建一個線程,否則根據拒絕策略,這個任務將被拒絕。使用直接移交將更高效,因為任務會直接移交給執行它的線程,而不是被放在隊列中,然后由工作線程從隊列中提取任務。只有當線程池是無界的或者可以拒絕任務時,該隊列才有實際價值。

4PriorityBlockingQueue:具有優先級的無界隊列,按優先級對元素進行排序。元素的優先級是通過自然順序或 Comparator 來定義的。

使用有界隊列時,需要注意線程池滿了后,被拒絕的任務如何處理。使用無界隊列時,需要注意如果任務的提交速度大于線程池的處理速度,可能會導致內存溢出。

 

面試題5:終止線程池有哪些方式?

答案:

1shutdown:“溫柔”的關閉線程池。不接受新任務,但是在關閉前會將之前提交的任務處理完畢。

2shutdownNow:“粗暴”的關閉線程池,也就是直接關閉線程池,通過 Thread#interrupt() 方法終止所有線程,不會等待之前提交的任務執行完畢。但是會返回隊列中未處理的任務。

面試題6:在我們實際使用中,線程池的大小配置多少合適?

答案:要想合理的配置線程池大小,首先我們需要區分任務是計算密集型還是I/O密集型。對于計算密集型,設置 線程數 = CPU + 1,通常能實現最優的利用率。對于I/O密集型,網上常見的說法是設置 線程數 = CPU * 2 ,這個做法是可以的,但不是最優的。

 在我們日常的開發中,我們的任務幾乎是離不開I/O的,常見的網絡I/ORPC調用)、磁盤I/O(數據庫操作),并且I/O的等待時間通常會占整個任務處理時間的很大一部分,在這種情況下,開啟更多的線程可以讓 CPU 得到更充分的使用,一個較合理的計算公式如下:

 線程數 = CPU * CPU利用率 * (任務等待時間 / 任務計算時間 + 1)

 例如我們有個定時任務,部署在4核的服務器上,該任務有100ms在計算,900msI/O等待,則線程數約為:4 * 1 * (1 + 900 / 100) = 40個。當然,具體我們還要結合實際的使用場景來考慮。

關于線程池有哪些經典面試題就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沙湾县| 南木林县| 吉安市| 上高县| 太仓市| 磐石市| 吴忠市| 延川县| 长寿区| 鞍山市| 白水县| 称多县| 新津县| 革吉县| 阜南县| 古蔺县| 元江| 多伦县| 玉树县| 阿克陶县| 沁源县| 沙河市| 通化县| 舒城县| 玉环县| 新乡市| 安远县| 毕节市| 长沙县| 河南省| 武夷山市| 任丘市| 临城县| 喜德县| 沙坪坝区| 南阳市| 太仆寺旗| 临夏市| 鹤峰县| 建宁县| 永平县|