如果我们没有synchronized
关键字而不是@Synchronized
注释,那会不会很糟糕?在这种情况下,注释是否会更自然(因为您可以使用非同步方法覆盖synchronized
方法 - 因此synchronized
对方法本身没有任何说明,而是指定方法之外的其他内容(该方法以某种方式受到保护),所以它不是真正的关键字?)
答案 0 :(得分:4)
synchronized用于代码块,您无法在代码块中添加注释。
您可以在方法甚至类上使用@synchronized
,但Java在首次引入Java时不支持注释。
我认为它非常重要,值得拥有自己的关键字。 ;)
答案 1 :(得分:2)
这很酷但注释不能完全取代synchronized
关键字:存在无法用注释标记的同步块。
此外,synchronized块接受用于同步的监视器。它可以动态提供,为我们提供一定的灵活性。注释不允许这样做,因为必须在编译时提供所有参数。
答案 2 :(得分:2)
同步实际上直接转换为字节码级别的monitorenter / monitorexit。并且您指定要同步的内容,您不能使用注释执行此操作:
synchronized (myLock) {
}
因此,对我来说这是一个关键词非常有意义。
答案 3 :(得分:1)
可能作为synchronized的方法版本,是的。但使用synchronized的另一种方法是允许您指定要同步的监视器。
public void someMethod()
{
synchronized(this)
{
//sync code
}
//unsynced code.
}