Можно ли в synchronized указать какую часть нужно синхронизировать

«Можно ли в synchronized указать какую часть нужно синхронизировать» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, можно синхронизировать только нужную часть кода, передав объект-монитор в synchronized блок. Это позволяет избежать излишней блокировки всего метода.

private final Object lock = new Object();

void doSomething() {
    // Несинхронизированный код
    synchronized (lock) {
        // Синхронизированная часть
    }
    // Дальше снова несинхронизированный код
}

Важно использовать отдельный объект для блокировки (не this), чтобы избежать случайных взаимоблокировок. Для статических методов можно использовать .class или статический объект.