4

如果我们有注释而不是synchronized关键字,那会很糟糕吗?@Synchronized在这种情况下,注释会更自然吗(因为您可以synchronized使用非同步方法覆盖方法 - 因此synchronized对方法本身只字未提,而是在方法之外指定了一些东西(该方法以某种方式受到保护) ,所以它不是真正的关键字?)

4

4 回答 4

4

同步用于代码块,您不能向代码块添加注释。

您可以拥有@synchronized方法甚至类,但在首次引入 Java 时,Java 不支持注解。

我认为它足够重要,值得拥有自己的关键字。;)

于 2012-09-19T16:00:57.243 回答
2

这会很酷,但注解不能完全替代synchronized关键字:有些同步块不能用注解标记。

此外,同步块接受用于同步的监视器。它可以动态提供,这给了我们一定的灵活性。注释不允许这样做,因为必须在编译时提供所有参数。

于 2012-09-19T16:02:46.210 回答
2

同步转换实际上直接在字节码级别上直接转换为 monitorenter/monitorexit。并且您指定要同步的内容,您不能使用注释来做到这一点:

synchronized (myLock) {
}

因此,它是一个关键字对我来说是完全合理的。

于 2012-09-19T16:11:54.007 回答
1

可能作为同步的方法版本,是的。但是同步的其他用途允许您指定您正在同步的监视器。

public void someMethod()
{
  synchronized(this)
  {
    //sync code
  }
  //unsynced code.
}
于 2012-09-19T16:01:52.397 回答