如果应用于整个块是否同步

Does synchronized if apply to whole block

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

是否是这个代码:

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

相当于此代码:

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

Is this code...equivalent to this code

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

这是一个语法错误:

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

synchronized 需要一个区块,根据JLS§14.19:

SynchronizedStatement:
synchronized ( Expression ) Block

如果有效,它可能等同于:

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

...但这纯粹是猜测;如果它不是由 JLS 定义的,谁知道它会是什么。 :-)


旁注:它是 synchronized,而不是 syncronizedsyncronised