創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!
在網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站過(guò)程中,需要針對(duì)客戶的行業(yè)特點(diǎn)、產(chǎn)品特性、目標(biāo)受眾和市場(chǎng)情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計(jì)方向。成都創(chuàng)新互聯(lián)公司還需要根據(jù)客戶的需求進(jìn)行功能模塊的開(kāi)發(fā)和設(shè)計(jì),包括內(nèi)容管理、前臺(tái)展示、用戶權(quán)限管理、數(shù)據(jù)統(tǒng)計(jì)和安全保護(hù)等功能。這篇文章將為大家詳細(xì)講解有關(guān)線程池有哪些經(jīng)典面試題,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
面試題1:使用線程池有哪些好處?
答案:降低資源消耗,通過(guò)重復(fù)利用已創(chuàng)建的線程,降低線程創(chuàng)建和銷毀造成的消耗;提高響應(yīng)速度,當(dāng)任務(wù)到達(dá)時(shí),任務(wù)可以不需要等到線程創(chuàng)建就能立即執(zhí)行;增加線程的可管理型,線程是稀缺資源,使用線程池可以進(jìn)行統(tǒng)一分配,調(diào)優(yōu)和監(jiān)控。
面試題2:概述一下線程池的核心屬性。
答案:
(1)線程工廠:用于創(chuàng)建工作線程的工廠。
(2)核心線程數(shù):當(dāng)線程池運(yùn)行的線程少于 corePoolSize 時(shí),將創(chuàng)建一個(gè)新線程來(lái)處理請(qǐng)求,即使其他工作線程處于空閑狀態(tài)。
(3)隊(duì)列:用于保留任務(wù)并移交給工作線程的阻塞隊(duì)列。
(4)大線程數(shù):線程池允許開(kāi)啟的大線程數(shù)。
(5)拒絕策略:往線程池添加任務(wù)時(shí),將在下面兩種情況觸發(fā)拒絕策略:一是線程池運(yùn)行狀態(tài)不是 RUNNING;二是線程池已經(jīng)達(dá)到大線程數(shù),并且阻塞隊(duì)列已滿時(shí)。
(6)保持存活時(shí)間:如果線程池當(dāng)前線程數(shù)超過(guò) corePoolSize,則多余的線程空閑時(shí)間超過(guò) keepAliveTime 時(shí)會(huì)被終止。
面試題3:線程池有哪些狀態(tài)?分別描述一下。
答案:
(1)RUNNING:接受新任務(wù)并處理排隊(duì)的任務(wù)。
(2)SHUTDOWN:不接受新任務(wù),但處理排隊(duì)的任務(wù)。
(3)STOP:不接受新任務(wù),不處理排隊(duì)的任務(wù),并中斷正在進(jìn)行的任務(wù)。
(4)TIDYING:所有任務(wù)都已終止,workerCount 為零,線程轉(zhuǎn)換到 TIDYING 狀態(tài)將運(yùn)行 terminated() 鉤子方法。
(5)TERMINATED:terminated() 已完成。
面試題4:線程池有哪些常見(jiàn)的阻塞隊(duì)列?使用時(shí)要注意什么?
答案:
(1)ArrayBlockingQueue:基于數(shù)組結(jié)構(gòu)的有界阻塞隊(duì)列,按先進(jìn)先出對(duì)元素進(jìn)行排序。
(2)LinkedBlockingQueue:基于鏈表結(jié)構(gòu)的有界/無(wú)界阻塞隊(duì)列,按先進(jìn)先出對(duì)元素進(jìn)行排序,吞吐量通常高于 ArrayBlockingQueue。Executors.newFixedThreadPool 使用了該隊(duì)列。
(3)SynchronousQueue:不是一個(gè)真正的隊(duì)列,而是一種在線程之間移交的機(jī)制。要將一個(gè)元素放入 SynchronousQueue 中,必須有另一個(gè)線程正在等待接受這個(gè)元素。如果沒(méi)有線程等待,并且線程池的當(dāng)前大小小于大值,那么線程池將創(chuàng)建一個(gè)線程,否則根據(jù)拒絕策略,這個(gè)任務(wù)將被拒絕。使用直接移交將更高效,因?yàn)槿蝿?wù)會(huì)直接移交給執(zhí)行它的線程,而不是被放在隊(duì)列中,然后由工作線程從隊(duì)列中提取任務(wù)。只有當(dāng)線程池是無(wú)界的或者可以拒絕任務(wù)時(shí),該隊(duì)列才有實(shí)際價(jià)值。
(4)PriorityBlockingQueue:具有優(yōu)先級(jí)的無(wú)界隊(duì)列,按優(yōu)先級(jí)對(duì)元素進(jìn)行排序。元素的優(yōu)先級(jí)是通過(guò)自然順序或 Comparator 來(lái)定義的。
使用有界隊(duì)列時(shí),需要注意線程池滿了后,被拒絕的任務(wù)如何處理。使用無(wú)界隊(duì)列時(shí),需要注意如果任務(wù)的提交速度大于線程池的處理速度,可能會(huì)導(dǎo)致內(nèi)存溢出。
面試題5:終止線程池有哪些方式?
答案:
(1)shutdown:“溫柔”的關(guān)閉線程池。不接受新任務(wù),但是在關(guān)閉前會(huì)將之前提交的任務(wù)處理完畢。
(2)shutdownNow:“粗暴”的關(guān)閉線程池,也就是直接關(guān)閉線程池,通過(guò) Thread#interrupt() 方法終止所有線程,不會(huì)等待之前提交的任務(wù)執(zhí)行完畢。但是會(huì)返回隊(duì)列中未處理的任務(wù)。
面試題6:在我們實(shí)際使用中,線程池的大小配置多少合適?
答案:要想合理的配置線程池大小,首先我們需要區(qū)分任務(wù)是計(jì)算密集型還是I/O密集型。對(duì)于計(jì)算密集型,設(shè)置 線程數(shù) = CPU數(shù) + 1,通常能實(shí)現(xiàn)最優(yōu)的利用率。對(duì)于I/O密集型,網(wǎng)上常見(jiàn)的說(shuō)法是設(shè)置 線程數(shù) = CPU數(shù) * 2 ,這個(gè)做法是可以的,但不是最優(yōu)的。
在我們?nèi)粘5拈_(kāi)發(fā)中,我們的任務(wù)幾乎是離不開(kāi)I/O的,常見(jiàn)的網(wǎng)絡(luò)I/O(RPC調(diào)用)、磁盤(pán)I/O(數(shù)據(jù)庫(kù)操作),并且I/O的等待時(shí)間通常會(huì)占整個(gè)任務(wù)處理時(shí)間的很大一部分,在這種情況下,開(kāi)啟更多的線程可以讓 CPU 得到更充分的使用,一個(gè)較合理的計(jì)算公式如下:
線程數(shù) = CPU數(shù) * CPU利用率 * (任務(wù)等待時(shí)間 / 任務(wù)計(jì)算時(shí)間 + 1)
例如我們有個(gè)定時(shí)任務(wù),部署在4核的服務(wù)器上,該任務(wù)有100ms在計(jì)算,900ms在I/O等待,則線程數(shù)約為:4 * 1 * (1 + 900 / 100) = 40個(gè)。當(dāng)然,具體我們還要結(jié)合實(shí)際的使用場(chǎng)景來(lái)考慮。
關(guān)于線程池有哪些經(jīng)典面試題就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
新聞標(biāo)題:線程池有哪些經(jīng)典面試題-創(chuàng)新互聯(lián)
文章分享:http://jinyejixie.com/article14/dpscge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、關(guān)鍵詞優(yōu)化、網(wǎng)站制作、標(biāo)簽優(yōu)化、云服務(wù)器、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容