常見理解
1.第一二中比較常見,不過多贅述,嚴格意義說只有兩種創(chuàng)建方式,第三種其實也是實現(xiàn)的Runnable,有返回值,并且是阻塞的,sleep10s后方法執(zhí)行完以后就會接著執(zhí)行 如何讓線程停止下來雖然Thread.stop()能讓線程停止,但是這種方法不推薦,屬于暴力停止,下面看看有什么方法 雖然userThread發(fā)送中斷信號,但是不會停止 此時依然發(fā)起中斷信號,但是run函數(shù)判斷是否攔截,默認為false,當發(fā)現(xiàn)變?yōu)閠rue,那么就中斷停止,同理Runnable的run也是一樣的,你可能會問為什么第二次就停止了,第一次為什么不停止,因為第一的判斷條件并沒有關(guān)聯(lián)到intercepted(),while(true)是死循環(huán),線程不會死亡,一直在執(zhí)行,當?shù)诙沃袛嘧鳛闂l件時,為true run方法就會走完,線程會死亡
發(fā)生異常將intercept狀態(tài)重置為false
如果main函數(shù)中發(fā)出中斷信號,那么代碼中發(fā)生異常此時會重置為false,線程不會中斷,只有在catch中再講中斷信號重置為true,才會中斷成功,所以如果想中斷,還要記得此處 前提主線程睡了10秒后主線程會結(jié)束,開啟子線程前將t線程作為主線程的守護線程,10秒過后主線程死亡,守護線程也會跟著死亡 如何讓線程按順序執(zhí)行首先如果不加t1.join(),那么cpu會切換線程執(zhí)行,輸出結(jié)果就是一會打印A一會打印B,加了以后t1獲得了cpu的執(zhí)行權(quán),一定會再t1執(zhí)行結(jié)束后才會執(zhí)行t2,輸出結(jié)果A打印99次以后B再打印99次 面試總結(jié)
【面試題】:什么是進程和線程 回答:進程是操作系統(tǒng)處理的最小單元,線程是處理器cpu處理的最小單元。一個進程至少一個線程 或 多個線程,如果一個進程,還有一個線程沒有殺掉還存活,那么進程還存活 (線程依附進程)。 【面試題】:并行和并發(fā)區(qū)別 回答: 一、意思不同 1、并發(fā):并發(fā)是指兩個或多個事件在同一時間間隔發(fā)生。 2、并行:并行是指兩個或者多個事件在同一時刻發(fā)生。 二、側(cè)重不同 1、并發(fā):并發(fā)側(cè)重于在同一實體上。 2、并行:并行側(cè)重于在不同實體上。 三、處理不同 1、并發(fā):并發(fā)在一臺處理器上“同時”處理多個任務(wù)。 2、并行:并行在多臺處理器上同時處理多個任務(wù)。 個人理解:并發(fā)是一個處理器cpu在單位時間內(nèi)切換不同的線程進行執(zhí)行任務(wù),吞吐量 并行是多個處理器在同一時間處理多個線程進行執(zhí)行任務(wù) 【面試題】 就是 run 和start的區(qū)別 ? 答:run是函數(shù)調(diào)用 和線程沒有任何關(guān)系, .start會走底層 會走系統(tǒng)層 最終調(diào)度到 run函數(shù),這才是線程。 【面試題】 如何控制線程的執(zhí)行順序 ? 答:join來控制cpu讓指定線程獲取執(zhí)行權(quán)力,能夠做到順序執(zhí)行 【面試題】 多線程中的并行和并發(fā)是什么? 答:四個車道,四輛車并行的走,就是并行, 四個車道中,五秒鐘多少的車流量,多少的吞吐量 【面試題】在Java中能不能指定CPU去執(zhí)行某個線程? 答:不能,Java是做不到的,唯一能夠去干預(yù)的就是C語言調(diào)用內(nèi)核的API去指定才行,這個你回答的話,面試官會覺得你研究點東西 【面試題】在項目開發(fā)過程中,你會考慮Java線程優(yōu)先級嗎? 答:不會考慮優(yōu)先級,為什么呢? 因為線程的優(yōu)先級很依賴與系統(tǒng)的平臺,所以這個優(yōu)先級無法對號入座,無法做到你想象中的優(yōu)先級,屬于不穩(wěn)定,有風險 因為某些開源框架,也不可能依靠線程優(yōu)先級來,設(shè)置自己想要的優(yōu)先級順序,這個是不可靠的 例如:Java線程優(yōu)先級又十級,而此時操作系統(tǒng)優(yōu)先級只有2~3級,那么就對應(yīng)不上 【面試題】sleep和wait又什么區(qū)別? 答:sleep是休眠,等休眠時間一過,才有執(zhí)行權(quán)的資格,注意:只是又有資格了,并不代表馬上就會被執(zhí)行,什么時候又執(zhí)行起來,取決于操作系統(tǒng)調(diào)度 wait是等待,需要人家來喚醒,喚醒后,才有執(zhí)行權(quán)的資格,注意:只是又有資格了,并不代表馬上就會被執(zhí)行,什么時候又執(zhí)行起來,取決于操作系統(tǒng)調(diào)度 含義的不同:sleep無條件可以休眠, wait是某些原因與條件需要等待一下(資源不滿足) 【面試題】 在Java中能不能強制中斷線程的執(zhí)行? 答:雖然提供了 stop 等函數(shù),但是此函數(shù)不推薦使用,為什么因為這種暴力的方式,很危險,例如:下載圖片5kb,只下載了4kb 等 我們可以使用interrupt來處理線程的停止,但是注意interrupt只是協(xié)作式的方式,并不能絕對保證中斷,并不是搶占式的 【面試題】 如何讓出當前線程的執(zhí)行權(quán)? 答:yield方法,只在JDK某些實現(xiàn)才能看到,是讓出執(zhí)行權(quán) 【面試題】sleep,wait,到底那個函數(shù)才會 清除中斷標記? 答:sleep在拋出異常的時候,捕獲異常之前,就已經(jīng)清除
|