同步是否适用于整个块

时间:2015-05-21 10:40:00

标签: java synchronization

这不是关于方法同步的问题,只是语句同步的问题。请不要错误地标记为重复。

这是代码:

synchronized (this) if (something)
{
    somecode();
    somemorecode();
}

相当于此代码:

if (something)
{
    synchronized (this)
    {
        somecode();
        somemorecode();
    }
}

1 个答案:

答案 0 :(得分:2)

  

此代码是否等同于此代码

不,不是。在您的第一个示例中,if测试 可能同步部分中。在第二个示例中,if 之外同步部分。

这是语法错误:

synchronized (this) if (something)
{
    somecode();
    somemorecode();
}
每个JLS§14.19

synchronized 需要一个块:

  

SynchronizedStatement :   
synchronizedExpressionBlock

如果有效,则可能相当于:

synchronized (this)
{
    if (something)
    {
        somecode();
        somemorecode();
    }
}

......但那是纯粹的猜测;如果它没有被JLS定义,谁知道它会是什么。 : - )

附注:它是synchronized,而不是syncronizedsyncronised