synchronized java 方法_在Java 8接口方法中不允许“synchronized”的原因是什么?

本文探讨了Java8中接口方法使用同步的问题,通过对比两种不同的接口定义方式,阐述了为何Java不允许在接口方法中使用synchronized关键字。并提出了对于这种设计背后原因的疑问,寻求权威解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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

}

}

现在,可以认为两个接口的行为方式相同,只是Interface2在method1()和method2()上建立了一个合约,这比Interface1要强一些。当然,我们也可能认为默认实现不应该对具体实现状态做出任何假设,或者这样的关键字不会简单地增加其权重。

题:

JSR-335专家组决定不支持同步接口方法的原因是什么?

注意,在这个问题急切关闭之前:适合Stack Overflow的Q& A格式:我只寻找权威的引文,而不是猜测。这个问题的权威答案可能会帮助许多未来的游客这个问题,所以请不要急切地关闭它。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值