2013-01-25 33 views
35

當我在接口的方法上使用​​時,編譯器發出錯誤。你能告訴我爲什麼發生這種情況嗎?爲什麼同步方法不包含在接口

​​無法應用於interface上的方法的原因是什麼(邏輯上)?

我試圖通過線程池做一個接口in this link。 幫我在上面的代碼中創建接口。

回答

64

因爲​​是一個實現細節。該方法的一個實現可能需要使該方法同步,而另一個可能不需要它。調用者不關心該方法是否同步。這不是合同的一部分,它告訴該方法做了什麼。使用哪種同步技術(如果有的話)來履行合同是無關緊要的。

+0

我對你的回答印象非常深刻。你能否詳細說明你答案的第二行。 你能幫助我通過線程池(見鏈接),我問我的問題的接口。 – devsda

+1

我不明白你想達到什麼目的,在另一個問題中,你已經被幾個海報告知忘記這個,並使用標準的線程池。無論如何,無論你想創建什麼界面,只要不聲明任何方法同步。它不屬於接口,而是接口的具體實現。 –

+0

其實我做了使用Inbuild Class的代碼。但是我的老師讓我通過簡單的數據結構來做到這一點,以便更好地理解。那就是爲什麼我試圖在不使用內置類的情況下構建代碼。 如果我刪除了'sychronized'關鍵字,那麼代碼會創建一些問題,例如同時從列表中刪除任務,這是我不想要的。 所以告訴我任何妥協的路徑,這個scenerios,我應該遵循。 – devsda

10

synchronized是一個實現細節,不屬於接口。

你可能有各種各樣的可能是線程安全的實現,不涉及使用關鍵字synchronized。

您可能會考慮使用一些註釋來表示實現應該是線程安全的意圖。例如http://jetbrains.dzone.com/tips/concurrency-hot-try-jcip解釋瞭如何使用JCIP併發註釋。

順便說一句。您可能想要使用java併發框架,而不是使用synchronized。目前使用像直接同步這樣的低級構造是一種反模式。

4

簡單的答案是同步的是談論方法的實現,但在接口中所有的方法都是抽象的,意味着沒有實現。

相關問題