2014-02-10 77 views
1
  1. 線程類據說與可運行接口具有「IS-a」關係以及「有-α」關係。擁有這兩者的好處是什麼?有關多線程的問題

  2. 爲什麼我們優先考慮「有-A」關係?

+0

你從哪裏聽到這個消息? – 2014-02-10 09:55:26

+0

線程類實現了runnable,因此它有一個關係,並且在它的構造函數中有一個接口的引用因此具有一個關係。 – user3239652

+0

@LutzHorn - 當然是分配問題。 –

回答

5

有這兩種方法有什麼好處?

這是一個糟糕的設計選擇,國際海事組織。如果要避免Thread首先執行Runnable會更清晰。這導致了各種錯誤(通過堆棧溢出問題見證),人們在Thread上調用run而不是start

爲什麼我們優先考慮「有-A」關係?

構圖通常比繼承更靈活。例如,如果創建Runnable實現,則可以將其傳遞給ExecutorService而不是Thread。你並沒有將自己與執行該操作的特定方式掛鉤 - 你只是說「這是我想運行的代碼」。

+0

關於調用使用run()代替start()的人一個設計錯誤:好吧,這是一個設計錯誤,但這不是原因;唯一真正的問題是人們拒絕閱讀文檔。 – Gimby

+1

@Gimby:我不同意。是的,這個錯誤顯然是沒有閱讀文檔的人的一部分 - 但是一個設計良好的API很容易使用,很難很好地使用。情況並非如此。僅僅因爲文檔說會發生什麼並不意味着它是一個乾淨的API。以'java.util.Calendar'爲例:它的所有醜陋事件都有記錄,但Joda Time仍然是一個更好的API,儘管這不是全面的文檔。 –