Java 8 接口方法中不允许“同步”的原因是什么?
在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 上建立一个契约,这比它更强大。当然,我们也可能认为,实现不应该对具体的实现状态做出任何假设,或者这样的关键字根本无法发挥其作用。Interface2
method1()
method2()
Interface1
default
问题:
JSR-335专家组决定不支持接口方法的原因是什么?synchronized