Это:
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 продолжить и узнать больше о тонкие различия с точки зрения производительности и так далее ...