java線程中start和run的區別


先上一段代碼,運行結果是什么

 結果是

 如果修改為t.start(),結果是

 

 

 start() :

它的作用是啟動一個新線程。
通過start()方法來啟動的新線程,處於就緒(可運行)狀態,並沒有運行,一旦得到cpu時間片,就開始執行相應線程的run()方法,這里方法run()稱為線程體,它包含了要執行的這個線程的內容,run方法運行結束,此線程隨即終止。start()不能被重復調用。用start方法來啟動線程,真正實現了多線程運行,即無需等待某個線程的run方法體代碼執行完畢就直接繼續執行下面的代碼。這里無需等待run方法執行完畢,即可繼續執行下面的代碼,即進行了線程切換。

run() :

run()就和普通的成員方法一樣,可以被重復調用。
如果直接調用run方法,並不會啟動新線程!程序中依然只有主線程這一個線程,其程序執行路徑還是只有一條,還是要順序執行,還是要等待run方法體執行完畢后才可繼續執行下面的代碼,這樣就沒有達到多線程的目的。
總結:調用start方法方可啟動線程,而run方法只是thread的一個普通方法調用,還是在主線程里

總結:

1. start()可以啟動一個線程,run()不能

2. start()不能被重復調用,run()可以

3. start中的run方法可以不執行完就繼續執行下面的代碼,即進行了線程切換。直接調用run方法必須等待其代碼全部執行完才能繼續執行下面的代碼

4. start() 實現了多線程,run()沒有執行多線程


免責聲明!

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



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