Java 8 では、次のように簡単に記述できます。
interface Interface1 {
default void method1() {
synchronized (this) {
// Something
}
}
static void method2() {
synchronized (Interface1.class) {
// Something
}
}
}
クラスでも使用できる完全な同期セマンティクスを取得します。synchronized
ただし、メソッド宣言で修飾子を使用することはできません。
interface Interface2 {
default synchronized void method1() {
// ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here
}
static synchronized void method2() {
// ^^^^^^^^^^^^ Modifier 'synchronized' not allowed here
}
}
ここで、 onと onのコントラクトInterface2
を確立することを除いて、2 つのインターフェイスは同じように動作すると主張できます。これは、コントラクトよりも少し強力です。もちろん、実装は具体的な実装状態について仮定を行うべきではない、またはそのようなキーワードは単にその重みを引き出すことができないと主張することもできます。method1()
method2()
Interface1
default
質問:
synchronized
JSR-335 専門家グループがインターフェイス メソッドをサポートしないことにした理由は何ですか?