Эти три вида синхронизации эквивалентны? - PullRequest
0 голосов
/ 22 апреля 2020

Это:

private final Object lock = new Object();

public void doSomething() {
    synchronized (lock) {
        // do something
    }
}

против. это:

public void doSomething() {
    synchronized (this) {
        // do something
    }
}

против. это:

public synchronized void doSomething() {
        // do something
}

Вот отличный урок , который объясняет различные способы синхронизации.

После прочтения для меня кажется, что это только вопрос вкуса какой из них вы применяете в своем коде, поскольку все они имеют одинаковые последствия, то есть: только один поток за один раз может do something. Можете ли вы подтвердить это?

Я читал здесь много статей о SO о синхронизации в Java, однако большинство из них не обсуждают ее вообще, а задают c аспекты ее для данных фрагментов кода. .

Я хотел бы начать с того, чтобы убедиться, что все три по сути одинаковы, что я не ошибаюсь в основах, а затем я могу go продолжить и узнать больше о тонкие различия с точки зрения производительности и так далее ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...