evgeniy8705
@evgeniy8705
Повелитель вселенной

Чем отличается синхронизированный метод и синхронизация по объекту, а так же по классу?

В общем то суть вопроса в заголовке. Подскажите пожалуйста их отличия. В каких случаях использовать тот или иной способ. В чем их один способ лучше другого и наоборот?

public synchronized void method() {

}

public void method() {
    synchronized (object) {

    }
}

class C {
    public void method() {
        synchronized (C.class) {

        }
    }
}
  • Вопрос задан
  • 483 просмотра
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Синхронизованный метод бывает двух типов - статический и нестатитический. Статический эквивалентен синхронизации тела метода на классе:
public synchronized static void method() {
}
class C {
    public static void method() {
        synchronized (C.class) {

        }
    }
}

Второй эквивалентен синхронизации тела метода на this :
public synchronized void method() {
}

public void method() {
    synchronized (this) {
    }
}


Различия, кажется, очевидны - при синхронизации на объекте вы можете выбрать этот самый объект, на котором надо синхронизоваться. Плюс вы можете выбрать какой именно кусок кода синхронизовать - и его надо минимизировать для ускорения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы