這是另一個非常經(jīng)典的 java 多線程面試問題,而且在面試中會經(jīng)常被問到。很簡單,但是很多人都會答不上來!
new 一個 Thread,線程進入了新建狀態(tài)。調(diào)用 start() 方法,會啟動一個線程并使線程進入了就緒狀態(tài),當分配到時間片后就可以開始運行了。 start() 會執(zhí)行線程的相應準備工作,然后自動執(zhí)行 run() 方法的內(nèi)容,這是真正的多線程工作。
而直接執(zhí)行 run() 方法,會把 run 方法當成一個 main 線程下的普通方法去執(zhí)行,并不會在某個線程中執(zhí)行它,所以這并不是多線程工作。
總結: 調(diào)用 start 方法方可啟動線程并使線程進入就緒狀態(tài),而 run 方法只是 thread 的一個普通方法調(diào)用,還是在主線程里執(zhí)行。