这不是关于方法同步的问题,只是语句同步的问题。请不要错误地标记为重复。
这是代码:
synchronized (this) if (something)
{
somecode();
somemorecode();
}
相当于此代码:
if (something)
{
synchronized (this)
{
somecode();
somemorecode();
}
}
答案 0 :(得分:2)
此代码是否等同于此代码
不,不是。在您的第一个示例中,if
测试 可能在同步部分中。在第二个示例中,if
在之外同步部分。
这是语法错误:
synchronized (this) if (something)
{
somecode();
somemorecode();
}
每个JLS§14.19 synchronized
需要一个块:
SynchronizedStatement :
synchronized
(Expression)Block
如果有效,则可能相当于:
synchronized (this)
{
if (something)
{
somecode();
somemorecode();
}
}
......但那是纯粹的猜测;如果它没有被JLS定义,谁知道它会是什么。 : - )
附注:它是synchronized
,而不是syncronized
或syncronised
。