Sobes.tech
Junior — Middle

Каква е разликата между синхронизирани методи на екземпляр и статични синхронизирани методи в Java?

sobes.tech AI

Отговор от AI

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

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

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

Пример:

public class Example {
    public synchronized void instanceMethod() {
        // блокира this
    }

    public static synchronized void staticMethod() {
        // блокира Example.class
    }
}

Това означава, че двата потока не могат едновременно да изпълнят същия синхронизиращ се метод на един и същи обект, но могат да изпълняват различни синхронизиращи се методи на различни обекти от този клас.

В същото време, статичният синхронизиращ се метод блокира цялата класа, така че в даден момент само един поток може да изпълнява който и да е статичен синхронизиращ се метод на този клас, независимо от екземплярите.