2013-01-25 10 views
35

​​をインターフェイスのメソッドに使用すると、コンパイラによってエラーが発生します。なぜこれが起こるのか教えていただけますか?synchronizedメソッドがインターフェイスに含まれない理由

​​はinterfaceのメソッドには適用できない理由は(論理的に)どうしてですか?

私はスレッドプールでインターフェイスを作成しようとしましたin this link。 上記のコードでInterfaceを作成するのを手伝ってください。

答えて

64

​​は実装の詳細です。メソッドの1つの実装では、メソッドを同期させる必要がありますが、別のメソッドは同期させる必要があります。呼び出し元は、メソッドが同期されているかどうかは気にしません。それはに何がの方法であるかを伝える契約の一部ではありません。契約の履行にどの同期技術が使用されているかは関係ありません。

+0

私はあなたの答えにとても感心しています。あなたはあなたの答えの2行目を精緻化できますか? 私は私の質問で尋ねたスレッドプール(リンクを参照)を介してインターフェイスを作ることができますか? – devsda

+1

私はあなたが達成したいことを理解しておらず、あなたの他の質問では、それを忘れて代わりに標準のスレッドプールを使用するように、いくつかのポスターから言われました。とにかく、あなたが作成したいインターフェースがあれば、どのメソッドも同期して宣言しないでください。これはインタフェースに属しませんが、インタフェースの具体的な実装に属します。 –

+0

実際にInbuildクラスを使用するコードを作成しました。しかし、私の先生は、わかりやすい理解のために、簡単なデータ構造でそれを作るように私に頼んだ。なぜ私は組み込みクラスを使わずにコードを構築しようとしたのですか? 'sychronized'キーワードを削除した場合、コードはいくつかの問題を引き起こします。リストからタスクを同時に削除するなど、私は望みません。 この風景については、私が守るべき道があると言います。 – devsda

10

synchronizedは実装の詳細であり、インターフェイスに属しません。

キーワードsynchronizedの使用を伴わないスレッドセーフである可能性のあるあらゆる種類の実装を持つことができます。

実装がスレッドセーフでなければならないという意図を示すために、いくつかの注釈を使用することを検討することができます。例えば、http://jetbrains.dzone.com/tips/concurrency-hot-try-jcipは、JCIP並行処理アノテーションの使い方を説明しています。

BTW。 synchronizedを使用する代わりに、java並行フレームワークで居心地がいいかもしれません。同期化のような低レベルの構造体を直接使用することは、最近、少しの反パターンと考えられています。

4

シンプルな答えは、メソッドの実装について話していますが、インターフェイスではすべてのメソッドが実装されていないことを意味する抽象メソッドです。

関連する問題