線程池有哪些經(jīng)典面試題-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

在網(wǎng)站設(shè)計、成都做網(wǎng)站過程中,需要針對客戶的行業(yè)特點、產(chǎn)品特性、目標受眾和市場情況進行定位分析,以確定網(wǎng)站的風格、色彩、版式、交互等方面的設(shè)計方向。成都創(chuàng)新互聯(lián)公司還需要根據(jù)客戶的需求進行功能模塊的開發(fā)和設(shè)計,包括內(nèi)容管理、前臺展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計和安全保護等功能。

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

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

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

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

答案:

(1)線程工廠:用于創(chuàng)建工作線程的工廠。

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

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

(4)大線程數(shù):線程池允許開啟的大線程數(shù)。

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

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

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

答案:

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

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

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

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

(5)TERMINATED:terminated() 已完成。

 

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

答案:

(1)ArrayBlockingQueue:基于數(shù)組結(jié)構(gòu)的有界阻塞隊列,按先進先出對元素進行排序。

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

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

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

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

 

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

答案:

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

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

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

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

 在我們?nèi)粘5拈_發(fā)中,我們的任務幾乎是離不開I/O的,常見的網(wǎng)絡I/O(RPC調(diào)用)、磁盤I/O(數(shù)據(jù)庫操作),并且I/O的等待時間通常會占整個任務處理時間的很大一部分,在這種情況下,開啟更多的線程可以讓 CPU 得到更充分的使用,一個較合理的計算公式如下:

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

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

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

新聞標題:線程池有哪些經(jīng)典面試題-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article14/dpscge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號、關(guān)鍵詞優(yōu)化、網(wǎng)站制作、標簽優(yōu)化、云服務器微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)