有沒有人有任何洞察Java Thread類run()方法公開的歷史?幾乎所有的時候,它都會被重寫使用,因此受保護的修飾符會更合適嗎?這仍然將start()作爲用戶的公共api離開,因此不會爲用戶意外調用run()而留下任何錯誤空間。公共修飾符在Java線程運行的好處()
回答
Thread
implements Runnable
,它定義了run()
方法,所以它必須公開。
但是由於Java 1.5建議使用Executors services而不是java.lang.Thread
。執行者將要執行的工作單元(Runnable
,Callable
)與實際執行者分離。 (與Thread
它們是相同的東西)
run
定義在Runnable
接口中,並且接口中定義的所有方法都是公共的。
謝謝,但我應該詳細闡述一些在我的問題 - 線程真的需要實現Runnable時,它完成其注入的Runnable目標裏面的所有工作? – gshx 2010-10-26 17:42:30
你最好不要重寫Thread,你應該創建一個Runnable並將它傳遞給新線程的構造函數。這樣,正在完成的工作,Runnable,與實現機制Thread保持分離。
Nathan,我同意你的看法,這就是爲什麼我想知道爲什麼它首先出現 - 當Thread類已經有一個接受Runnable的構造函數時,Thread實現Runnable的作用是什麼,它覆蓋了run() – gshx 2010-10-26 17:29:00
@gshx :好問題,我的猜測是它提供了一條捷徑。 – 2010-10-26 18:00:42
我認爲這基本上是一個糟糕的設計,爲了使用戶「簡單」,允許將任務運行(Runnable
)與線程直接運行。由於Thread
是在JDK 1.0中添加的,但從那時起,該設計一直無法更改,因此只是棄用(有點)而不贊成使用Executor
框架。 JDK 1.0是很久以前的事了,從那時起,沒有經驗的好處就犯了各種各樣的錯誤。
我實際上贊成廢棄Thread上的run(),而是建議使用executors。現在顯然不可能保護它。 – gshx 2010-10-26 18:10:44
- 1. WPF控件的公共類修飾符
- 2. 公共和私人訪問修飾符
- 3. 私有和公共java訪問修飾符基礎知識
- 4. 「修飾符公共對此項無效」在接口方法
- 5. 公共構造不帶任何修飾
- 6. Java類修飾符
- 7. Typescript中公共類訪問修飾符的用途是什麼?
- 8. Typescript類:明確的「公共」修飾符是最佳做法嗎?
- 9. 如何限制引用庫中的公共訪問修飾符?
- 10. 用於接口的公共類型修飾符
- 11. Java類的修飾符
- 12. JAVA中的「threadsafe」修飾符?
- 13. Java的默認訪問修飾符曾經是公開的
- 14. Java拼圖:修飾符
- 15. Java公共/私有和靜態修飾符如何影響在一行上聲明的多個變量?
- 16. Java訪問修飾符:無修飾符與「默認」
- 17. 在Swift中,Access修飾符的內部和公共之間有什麼區別?
- 18. getter/setter VS公共變量的好處?
- 19. 在java中訪問'final'修飾符類
- 20. 在Java中比較修飾符
- 21. Java線程運行
- 22. 您應該在Ruby中使用私有,受保護和公共修飾符嗎?
- 23. 是私人和公共訪問修飾符在性能上有所不同嗎?
- 24. async修飾符和await運算符如何與委託和線程不同?
- 25. Rad公司上傳修飾
- 26. 非法修飾的組合:公共和私人
- 27. 修飾語「公共」是無效的這個項目
- 28. 編譯中的Java默認修飾符
- 29. java的反映修飾符參數
- 30. 對Java的修飾符有些困惑
是的,你是對的,我會認爲這就是爲什麼run()在那裏作爲一個公共方法。事實上,由於有一個構造函數需要一個Runnable參數 - public Thread(Runnable target),它應該否定實現Runnable的必要性? – gshx 2010-10-26 17:20:53
它「不可取」?而不是相反? :-) – 2010-10-26 17:26:37
謝謝。一個額外的'不':)被刪除。 – Bozho 2010-10-26 17:27:09