創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),天橋企業(yè)網(wǎng)站建設(shè),天橋品牌網(wǎng)站建設(shè),網(wǎng)站定制,天橋網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,天橋網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
多線程并發(fā)編程是Java編程中重要的一塊內(nèi)容,也是面試重點(diǎn)覆蓋區(qū)域。所以,學(xué)好多線程并發(fā)編程對Java程序員來來說極其重要的。文末領(lǐng)取答案
下面小編整理了65道最常見的Java多線程面試題及答案,供你學(xué)習(xí)或者面試參考。
一、Thread類常用方法:
Thread MyThread = new Thread(mt,“線程名”);
//sleep()使該線程進(jìn)入阻塞狀態(tài),本身不會釋放鎖
MyThread .sleep(millis);//毫秒數(shù)
MyThread .yield()//放棄cpu使用權(quán)利,使該線程進(jìn)入就緒狀態(tài)
MyThread.getState();//獲得線程狀態(tài)
MyThread.currentThread();//獲得正在執(zhí)行的線程對象MyThread
MyThread.join();//等待該線程結(jié)束,調(diào)用該線程(MyThread)的該方法(.join())的線程(比如主線程)才能繼續(xù)執(zhí)行
MyThread.setDaemon(on);//設(shè)置該線程為守護(hù)線程
MyThread.isDaemon();//判斷是否守護(hù)線程
二、volatile和synchronized的區(qū)別
volatile本質(zhì)是在告訴jvm當(dāng)前變量在寄存器(工作內(nèi)存)中的值是不確定的,需要從主存中讀取; synchronized則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞住。
volatile僅能使用在變量級別;synchronized則可以使用在變量、方法、和類級別的
volatile不會造成線程的阻塞;synchronized可能會造成線程的阻塞。
三、怎么喚醒一個(gè)阻塞的線程
如果線程是因?yàn)檎{(diào)用了wait()、sleep()或者join()方法而導(dǎo)致的阻塞,可以中斷線程,并且通過拋出InterruptedException來喚醒它;如果線程遇到了IO阻塞,無能為力,因?yàn)镮O是操作系統(tǒng)實(shí)現(xiàn)的,Java代碼并沒有辦法直接接觸到操作系統(tǒng)。
四、wait()、sleep()方法和notify()/notifyAll()方法在放棄對象監(jiān)視器時(shí)有什么區(qū)別
sleep睡眠后不出讓系統(tǒng)資源,wait讓出系統(tǒng)資源其他線程可以占用CPU
sleep()方法不會釋放鎖
wait()方法和notify()/notifyAll()方法在放棄對象監(jiān)視器的時(shí)候的區(qū)別在于:wait()方法立即釋放對象監(jiān)視器,notify()/notifyAll()方法則會等待線程剩余代碼執(zhí)行完畢才會放棄對象監(jiān)視器。
五、start()方法和run()方法的區(qū)別
只有調(diào)用了start()方法,才會表現(xiàn)出多線程的特性,不同線程的run()方法里面的代碼交替執(zhí)行。如果只是調(diào)用run()方法,那么代碼還是同步執(zhí)行的,必須等待一個(gè)線程的run()方法里面的代碼全部執(zhí)行完畢之后,另外一個(gè)線程才可以執(zhí)行其run()方法里面的代碼。
下面的面試題答案我就不一一弄出來了,文末免費(fèi)領(lǐng)取答案
多線程有什么用?
線程和進(jìn)程的區(qū)別是什么?
Java實(shí)現(xiàn)線程有哪幾種方式?
啟動線程方法start()和run()有什么區(qū)別?
怎么終止一個(gè)線程?如何優(yōu)雅地終止線程?
一個(gè)線程的生命周期有哪幾種狀態(tài)?它們之間如何流轉(zhuǎn)的?
線程中的wait()和sleep()方法有什么區(qū)別?
多線程同步有哪幾種方法?
什么是死鎖?如何避免死鎖?
多線程之間如何進(jìn)行通信?
線程怎樣拿到返回結(jié)果?
violatile關(guān)鍵字的作用?
新建T1、T2、T3三個(gè)線程,如何保證它們按順序執(zhí)行?
怎么控制同一時(shí)間只有3個(gè)線程運(yùn)行?
為什么要使用線程池?
常用的幾種線程池并講講其中的工作原理。
線程池啟動線程submit()和execute()方法有什么不同?
CyclicBarrier和CountDownLatch的區(qū)別?
什么是活鎖、饑餓、無鎖、死鎖?
什么是原子性、可見性、有序性?
什么是守護(hù)線程?有什么用?
怎么中斷一個(gè)線程?如何保證中斷業(yè)務(wù)不影響?
一個(gè)線程運(yùn)行時(shí)發(fā)生異常會怎樣?
什么是重入鎖?
Synchronized有哪幾種用法?
Fork/Join框架是干什么的?
線程數(shù)過多會造成什么異常?
說說線程安全的和不安全的集合。
什么是CAS算法?在多線程中有哪些應(yīng)用。
怎么檢測一個(gè)線程是否擁有鎖?
Jdk中排查多線程問題用什么命令?
線程同步需要注意什么?
線程wait()方法使用有什么前提?
Fork/Join框架使用有哪些要注意的地方?
線程之間如何傳遞數(shù)據(jù)?
保證"可見性"有哪幾種方式?
說幾個(gè)常用的Lock接口實(shí)現(xiàn)鎖。
ThreadLocal是什么?有什么應(yīng)用場景?
ReadWriteLock有什么用?
FutureTask是什么?
怎么喚醒一個(gè)阻塞的線程?
不可變對象對多線程有什么幫助?
多線程上下文切換是什么意思?
Java中用到了什么線程調(diào)度算法?
Thread.sleep(0)的作用是什么?
Java內(nèi)存模型是什么,哪些區(qū)域是線程共享的,哪些是不共享的
什么是樂觀鎖和悲觀鎖?
Hashtable的size()方法為什么要做同步?
同步方法和同步塊,哪種更好?
什么是自旋鎖?
Runnable和Thread用哪個(gè)好?
Java中notify和notifyAll有什么區(qū)別?
為什么wait/notify/notifyAll這些方法不在thread類里面?
為什么wait和notify方法要在同步塊中調(diào)用?
為什么你應(yīng)該在循環(huán)中檢查等待條件?
Java中堆和棧有什么不同?
你如何在Java中獲取線程堆棧?
如何創(chuàng)建線程安全的單例模式?
什么是阻塞式方法?
提交任務(wù)時(shí)線程池隊(duì)列已滿會時(shí)發(fā)會生什么?
總結(jié):
今天就分享到這里,備戰(zhàn)金九銀十,高薪在等你,資料都可以免費(fèi)提供給大家,我都按專題分類做成了pdf,還有很多視頻資料,花了我老多老多的時(shí)間了,所以老鐵們給我點(diǎn)個(gè)贊把(圖片只是一部分)
領(lǐng)取方式關(guān)注我的架構(gòu)師交流××× ×××就可以免費(fèi)領(lǐng)取了哦
網(wǎng)站題目:65道多線程面試題你都會嗎,是你虐面試官還是面試官虐你
當(dāng)前鏈接:http://sd-ha.com/article6/josoig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、搜索引擎優(yōu)化、網(wǎng)站策劃、、用戶體驗(yàn)、營銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)