我們可以使用Implementing Runnable或擴展線程類來創建線程。任何人都可以告訴我性能明智哪個更快地實現Runnable或擴展Thread類以及爲什麼?另外我知道在實現Runnable時,我們可以實現更多的接口並擴展一個類。如果我們直接擴展一個Thread類,那麼擴展一個類是我們失去的東西。但在這兩種情況下是否有任何性能差異性能明智,實現Runnable或擴展Thread類的速度更快
回答
表現方面兩者沒有區別。然而,使用「implements Runnable」更好,因爲它給你更多的自由(擴展另一個類,...),同一個對象在多個線程之間共享(這也減少了使用的內存)。
這只是故事的一點。延長線程風險更大 – Stultuske
這個解釋很薄。這不是關於「自由」,而是關於正確的建模。並且(實際上)永遠不會將在線程內部運行的內容建模爲線程。 「表現」是一種紅鯡魚,只有在正確性被理解之前纔在這個層面上被問到。 –
這取決於(一如既往):
- 如果你想運行它只有一次,
Thread
擴展沒有缺點,除了它是不夠靈活,更難測試(例如,在一個單元測試)。 - 如果您想更頻繁地運行它,
Runnable
會更靈活,因爲您可以使用線程池將它傳遞給Executor
。通過這樣做,您可以獲得更好的性能,因爲每次執行的線程創建開銷都將被刪除。
如果實現Runnable
你有不同的方式(在單元測試同步,使用執行,或者即使有Thread
包裝也無妨),以執行代碼。而純粹的線程擴展永遠不會有更好的性能,它只能是平等的。僅通過允許多個接口或使用獨立繼承來實現Runnable
總是更好的選擇,這只是更好的設計。在此之後我絕不會延伸Thread
。
問題是,如果您的類型是_is-a_'Thread',那麼您在* Thread中運行的內容應該只擴展'Thread',而不是。不過,它是_is-a_'Runnable'。所以問題不是「哪個表現更好?」這是一個可怕的問題。一個很好的問題是,「哪個是正確的?」和「哪個會導致更少的錯誤?」正確的工程每次都會帶來不確定的微觀「優化」。做對,讓「表演」自己照顧自己。 –
- 1. 無法在Thread類擴展到同步兩個線程,但實現Runnable接口
- 2. 哪個更好:實現一個可運行的接口或擴展Thread類
- 3. Android - MyCustomView擴展SurfaceView實現Runnable,OnTouchListener
- 4. 實現Runnable與擴展線程
- 5. 明智的方式來擴展requests.Response類?
- 6. 定時器不能在擴展SurfaceView的類中運行,並且實現了Runnable
- 7. 性能迅速擴展
- 8. 是否有任何Visual Studio擴展使「快速查看」對話更智能?
- 9. 哪個圖像擴展對質量和性能(速度)更好?
- 10. Runnable,Thread,RunOnUIThread
- 11. Java擴展線程不工作,但實現了Runnable。我不明白爲什麼?
- 12. 快速numpy陣列擴展
- 13. 可擴展數據集的可序列化或可擴展性,哪個更快更實用?
- 14. Java - 實現Runnable行爲與擴展線程相比
- 15. 快速ArcSin實現或在c近似#
- 16. 智能卡訪問速度
- 17. 增強combobox擴展速度
- 18. JOIN或子查詢速度更快嗎?
- 19. 更改ISO或快門速度
- 20. 在python的擴展類中實現timeit()
- 21. 快速代碼以獲得WPF視覺DirectX紋理(性能明智)
- 22. 爲什麼Facebook上的智能搜索速度如此之快
- 23. 快速求冪的實現
- 24. 擴展不變類型(或:恆定類型快速緩存)OCaml中
- 25. LocalDateTime擴展功能和智能鑄件
- 26. 哪些功能運行速度更快?
- 27. 在屬性上實現綁定擴展
- 28. Activiti如何實現可擴展性
- 29. Apache AirFlow如何實現可擴展性?
- 30. 實現接口擴展屬性(?繼承)
這不是性能問題。沒有可衡量的差異。應該首選Runnable,因爲你應該使用像Executor這樣的新併發類,而不是Thread。這些都採用Runnables。這有一個很好的理由。 – duffymo
我認爲關於「性能」沒有實際的區別(你的意思是什麼?執行速度更快,內存消耗更好?)。 Class和Interface的主要原因之一是在Java中你不能有多重繼承,所以根據你的設計,你的類可能已經擴展了另一個類,而你所需要的只是實現Runnable。 –
我的意思是執行速度更快。我知道在實現Runnable時,我們可以實現更多的接口並擴展一個類。如果我們直接擴展一個Thread類,那麼擴展一個類是我們失去的東西。但是在這兩種情況下是否有任何性能差異 – user2821056