爲什麼我們需要通過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()
方法
相關問題
- 1. Java線程啓動方法或方法
- 2. Java線程無法啓動(或需要很長時間才能啓動)
- 3. 使用方法指針啓動線程
- 4. Java - 線程無法啓動
- 5. 在新線程中啓動方法
- 6. Java線程:在啓動後調用Thread對象的run()方法
- 7. java:不要在當前活動時啓動另一個線程
- 8. Java使線程同時啓動
- 9. 在Java中使用LinkedList時需要List和DeQueue方法
- 10. 在Java中每個方法啓動一個線程
- 11. 調用run方法,而無需啓動一個新的線程
- 12. 應用程序在啓動過程中需要很長時間
- 13. 需要幫助線程的run方法
- 14. 異步方法在當前線程(主線程)中啓動AsyncCallback
- 15. 需要在Java方法showMessageDialog
- 16. 使用GUI啓動線程(Java)
- 17. 需要線程安全Java中的MessageDigest
- 18. Delegate.Invoke()是否啓動委託在新線程上指向的方法,還是需要使用Delegate.BeginInvoke()?
- 19. 啓動iOS應用程序需要多少線程(至少)?
- 20. Java - 在當前線程完成時啓動線程
- 21. 使用主要方法啓動我的應用程序
- 22. 我是否需要boot_completed和startForeground啓動服務中的線程?
- 23. 在啓動/啓動時自動啓動應用程序的首選方法?
- 24. Java新線程何時啓動?
- 25. 我需要使用哪些線程工作方法?
- 26. 如何啓動方法帶參數的使用線程
- 27. PyQt的UI不顯示在啓動時(我需要不同的線程?)
- 28. 使用DateTime時無法啓動方法
- 29. Java需要內存用於新線程
- 30. 在java中同時啓動10個不同的線程
一個
Thread
出於好奇:這是怎麼了?爲什麼downvote? – 2010-03-10 10:38:10