調用start() 方法時會執行run() 方法,為什么我們不能直接調用 run() 方法?
學習或者復習多線程的時候有沒有問過自己這個問題呢?
首先需要知道線程的幾個狀態以及多線程工作方式。
- new 一個Thread,線程進入了新建狀態,調用start() 方法,會啟動一個線程並使線程進入了就緒狀態,當分配到 時間片 后就可以開始運行了。start() 會執行線程的相應准備工作,然后自動執行run() 方法的內容,這是真正的多線程工作。
-
而直接執行run() 方法,會把run 方法當成一個main 線程下的普通方法去執行,並不會在某個線程中執行它,所以這並不是多線程工作。
總的來說:調用start 方法方可啟動線程並使線程進入就緒狀態,而run 方法只是thread 的一個普通方法調用,還是在主線程里執行。
ps:附圖一張(線程狀態)