爲什麼我們需要通過start方法運行線程,而不是直接通過run方法運行?在使用線程時需要java中的啓動方法
1
A
回答
3
由於run
方法包含新線程應執行的代碼。
如果您打電話給run
方法,那麼您只需在當前線程上執行它。
調用start
啓動新線程,然後在新線程上執行run
方法。
6
run
方法只是在當前線程中執行線程的任務。從歷史上看,您可以繼承Thread
並覆蓋run
- 雖然今天首選的機制是通過Thread
構造函數Runnable
。因此run
本身不會執行任何線程 - 它是start
,它會創建一個新的「實際」線程(而不僅僅是一個Thread
對象),並在啓動時執行run()
。
1
start()
方法告訴JVM它需要創建一個特定於系統的線程。創建系統資源後,它將Runnable
對象傳遞給它以執行其run()
方法。直接調用run()
方法的「線程」與調用對象在同一線程中執行,而不是像預期的那樣在單獨的執行線程中執行。
換句話說,調用run()
就像正常的方法調用一樣。而調用start()
會告訴線程創建必要的系統資源,然後異步執行run()
方法。
編輯:
例如,
僞代碼1:
thread one = new thread();
thread two = new thread();
one.run();
two.run();
這使得線程順序運行的,即,two.run();
將僅運行後one.run();
飾面。
僞碼2:
thread one = new thread();
thread two = new thread();
one.start();
two.start();
在這種情況下,兩個線程同時啓動和運行。
的start()
方法調用run()
方法異步(犯規等待任何結果,只是觸發了一個動作),但是當我們調用run()
,它運行同步,也就是說,它會等待直到run()
完成,然後才進到下一行代碼。
0
in java Thread
總是在Stack Memory
中創建。當您創建一個新的線程時,它會在堆棧中佔用新的內存。當你調用start()
方法它初始化新Stack Memory
,當你調用run()
方法它同樣Stack Memory
初始化這就是爲什麼我們一直呼籲與start()
方法
一個
Thread
出於好奇:這是怎麼了?爲什麼downvote? – 2010-03-10 10:38:10