Каква е разликата между синхронизирани методи на екземпляр и статични синхронизирани методи в 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
}
}
Това означава, че двата потока не могат едновременно да изпълнят същия синхронизиращ се метод на един и същи обект, но могат да изпълняват различни синхронизиращи се методи на различни обекти от този клас.
В същото време, статичният синхронизиращ се метод блокира цялата класа, така че в даден момент само един поток може да изпълнява който и да е статичен синхронизиращ се метод на този клас, независимо от екземплярите.