先上一段代碼,運行結果是什么
結果是
如果修改為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()沒有執行多線程