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