1. 程式人生 > >為什麼我們呼叫start()方法時會執行run()方法?為什麼我們不能直接呼叫run()方法?他們之間有什麼區別?

為什麼我們呼叫start()方法時會執行run()方法?為什麼我們不能直接呼叫run()方法?他們之間有什麼區別?

為什麼我們呼叫start()方法時會執行run()方法?

因為類Thread中的start方法中,呼叫了Thread中的run方法。順便說下,類A繼承了Tread類,在A中寫run方法,就會覆蓋掉Thread中的run方法,所以此時呼叫start方法後,實現的是自己的run方法體裡面的程式碼。

為什麼我們不能直接呼叫run()方法?

如果我們直接呼叫子執行緒的run()方法,其方法還是執行在主執行緒中,程式碼在程式中是順序執行的,所以不會有解決耗時操作的問題。所以不能直接呼叫執行緒的run()方法,只有子執行緒開始了,才會有非同步的效果。當thread.start()方法執行了以後,子執行緒才會執行run()方法,這樣的效果和在主執行緒中直接呼叫run()方法的效果是截然不同的。

start( )與run( )之間有什麼區別?

run()方法:在本執行緒內呼叫該Runnable物件的run()方法,可以重複多次呼叫;
start()方法:啟動一個執行緒,呼叫該Runnable物件的run()方法,不能多次啟動一個執行緒;