Разве синхронизация блока экземпляров не похожа на синхронизацию блока операторов?
AFAIK, нет, потому что это не просто «блок операторов», а инициализатор экземпляра. Если вы хотите, чтобы выполнение блока было синхронизировано, вы всегда можете синхронизироваться по ссылке this
внутри инициализатора. Кроме того, я не думаю, что вы можете синхронизировать блоки верхнего уровня (блоки методов имеют специальную синтаксическую поддержку для этого, как вы уже знаете).
public class Test {
// can't synchronize on a top-level block
synchronized(this) {
}
{
// OK
synchronized(this) {
}
}
// Methods have special syntactic support
public synchronized void doIt() {
}
public void doIt() {
// same as above
synchronized(this) {
}
}
}