我很奇怪,爲什麼Thread.start(現有JDK1.0)方法被設計爲不返回一個對象。我知道開發者可以使用類似的可調用方法,但後來很久以後纔出現,例如JDK 1.5。我承認人們可以使用一種解決方法,如在線程構造函數中傳遞一個結果容器來包含線程結果,但是我想知道爲什麼它不是爲了返回結果而設計的。爲什麼線程無法啓動並運行方法返回任何內容?
就是我在這裏缺少什麼?在設計方面它是否好(例如,即使在不需要時也不需要明確地返回空值)還是設計不合格?
我很奇怪,爲什麼Thread.start(現有JDK1.0)方法被設計爲不返回一個對象。我知道開發者可以使用類似的可調用方法,但後來很久以後纔出現,例如JDK 1.5。我承認人們可以使用一種解決方法,如在線程構造函數中傳遞一個結果容器來包含線程結果,但是我想知道爲什麼它不是爲了返回結果而設計的。爲什麼線程無法啓動並運行方法返回任何內容?
就是我在這裏缺少什麼?在設計方面它是否好(例如,即使在不需要時也不需要明確地返回空值)還是設計不合格?
Thread.start()
僅僅是開始線程執行並返回。通常在返回時線程仍在執行,甚至等待開始執行,所以沒有結果返回。由於此時沒有任何回報,所以Thread.start()
不返回任何內容是有意義的。
Thread.run()
通常不被你的代碼調用,因爲調用它會運行在現有的線程的方法,而不是在一個新的線程中運行它。相反,在JVM創建新線程後,新線程中的Java虛擬機(JVM)調用Thread.run()
。 JVM代碼當然不知道你的線程應該做什麼,並且不知道如何處理返回值,所以Thread.run()
也沒有返回值。
實在沒有什麼返回。 Thread.start()
僅將該線程「放入」內部執行計劃程序。這並不意味着線程立即開始執行代碼。當內部調度程序決定該線程已準備好執行時 - 它將從run()
方法開始執行代碼 - 當然可以隨時切換爲執行另一個線程。
應該怎樣在您看來,該方法的回報?我無法想象一個適用於大多數線程的通用解決方案。此外,我的大部分線程甚至沒有設計返回結果。我的意思是使用線程的唯一目標是並行執行代碼。有很多情況下你想執行不返回結果的代碼。同樣返回結果意味着有某種*監視進程*加入了結果,還有很多情況下你沒有這個結果。 – Zabuza
所以默認的解決方案是返回** void **,但是您可以擴展'Thread'並將結果字段與'getResult'方法一起引入您自己的結果類。例如像「ThreadWithResult擴展線程」這樣的類。我不知道他們爲什麼按照他們的方式設計「Callable」,你可能會爲兩種版本爭論 - 結果與否。一個可能的原因可能是引入了**泛型**,因爲如果沒有它們,「Callable
要回答你的問題,「你應該怎樣迴應你的觀點,就像可迴應的方式。可能這在JDK1.0中是不可能的,因爲仿製藥很久以後纔出現 – emilly