43

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

synchronizedのメソッドに適用できない(論理的に) 理由は何interfaceですか?

このリンクで、スレッドプールを介したインターフェイスを作成しようとしました。上記のコードでインターフェイスを作成するのを手伝ってください。

4

3 に答える 3

81

synchronized実装の詳細であるためです。メソッドの 1 つの実装では、メソッドを同期化する必要があるかもしれませんが、別の実装では必要ないかもしれません。呼び出し元は、メソッドが同期されているかどうかを気にしません。これは、メソッドが何をするかを示すコントラクトの一部ではありません。契約を履行するためにどの同期技術が使用されるかは関係ありません。

于 2013-01-25T11:27:17.007 に答える
11

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

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

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

ところで。同期を使用する代わりに、Java 並行フレームワークに慣れることができます。同期のような低レベルの構造を直接使用することは、最近では少しアンチパターンと見なされています。

于 2013-01-25T11:38:01.493 に答える
5

簡単な答えは同期ですメソッドの実装について話していますが、インターフェイスではすべてのメソッドが抽象的であり、実装がないことを意味します。

于 2014-05-25T17:54:38.520 に答える