調用start() 方法時會執行run() 方法,為什么我們不能直接調用 run() 方法


調用start() 方法時會執行run() 方法,為什么我們不能直接調用 run() 方法?

學習或者復習多線程的時候有沒有問過自己這個問題呢?

首先需要知道線程的幾個狀態以及多線程工作方式。

  •   new 一個Thread,線程進入了新建狀態,調用start() 方法,會啟動一個線程並使線程進入了就緒狀態,當分配到 時間片 后就可以開始運行了。start() 會執行線程的相應准備工作,然后自動執行run() 方法的內容,這是真正的多線程工作。
  •   而直接執行run() 方法,會把run 方法當成一個main 線程下的普通方法去執行,並不會在某個線程中執行它,所以這並不是多線程工作。

  總的來說:調用start 方法方可啟動線程並使線程進入就緒狀態,而run 方法只是thread 的一個普通方法調用,還是在主線程里執行。

  ps:附圖一張(線程狀態)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM