【15期】談?wù)勥@幾個常見的多線程面試題
閱讀本文大概需要 3 分鐘。
以下幾道題目比較初級,是必須要掌握的多線程基礎(chǔ)面試題。
創(chuàng)建線程有幾種不同的方式?你喜歡哪一種?為什么?
繼承Thread類
實(shí)現(xiàn)Runnable接口
應(yīng)用程序可以使用Executor框架來創(chuàng)建線程池
概括的解釋下線程的幾種可用狀態(tài)。
等待阻塞:運(yùn)行( running )的線程執(zhí)行 o . wait ()方法, JVM 會把該線程放 入等待隊(duì)列( waitting queue )中。
同步阻塞:運(yùn)行( running )的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則 JVM 會把該線程放入鎖池( lock pool )中。
其他阻塞: 運(yùn)行( running )的線程執(zhí)行 Thread . sleep ( long ms )或 t . join ()方法,或者發(fā)出了 I / O 請求時, JVM 會把該線程置為阻塞狀態(tài)。當(dāng) sleep ()狀態(tài)超時、 join ()等待線程終止或者超時、或者 I / O 處理完畢時,線程重新轉(zhuǎn)入可運(yùn)行( runnable )狀態(tài)。
同步方法和同步代碼塊的區(qū)別是什么?
同步方法默認(rèn)用this或者當(dāng)前類class對象作為鎖;
同步代碼塊可以選擇以什么來加鎖,比同步方法要更細(xì)顆粒度,我們可以選擇只同步會發(fā)生同步問題的部分代碼而不是整個方法;
在監(jiān)視器(Monitor)內(nèi)部,是如何做線程同步的?程序應(yīng)該做哪種級別的同步?
什么是死鎖(deadlock)?
如何確保N個線程可以訪問N個資源同時又不導(dǎo)致死鎖?
互斥條件:一個資源每次只能被一個進(jìn)程使用。
保持和請求條件:一個進(jìn)程因請求資源而阻塞時,對已獲得資源保持不放。
不可剝奪性:進(jìn)程已獲得資源,在未使用完成前,不能被剝奪。
循環(huán)等待條件(閉環(huán)):若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系。
推薦閱讀:
【12期】談?wù)勴?xiàng)目中單點(diǎn)登錄的實(shí)現(xiàn)原理?
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?

