Sobes.tech
Back to questions
Junior — Middle
54

Чем отличаются синхронизированные методы экземпляра и статические синхронизированные методы в Java?

Answer from AI

sobes.tech AI

В Java синхронизированные методы бывают двух типов: синхронизированные методы экземпляра и статические синхронизированные методы. Основное отличие заключается в том, на каком объекте происходит блокировка:

  • Синхронизированный метод экземпляра (synchronized без static): Блокировка происходит на объекте (this), к которому принадлежит метод. Это значит, что если у вас есть несколько экземпляров класса, каждый из них имеет свою собственную блокировку.

  • Статический синхронизированный метод (static synchronized): Блокировка происходит на объекте класса — Class объекте, который представляет сам класс. Таким образом, блокировка общая для всех экземпляров класса.

Пример:

public class Example {
    public synchronized void instanceMethod() {
        // блокируется this
    }

    public static synchronized void staticMethod() {
        // блокируется Example.class
    }
}

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

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