Из некоторых источников ИнтернетаСинхронные методы экземпляра в Java
Вот синхронизированный метод экземпляра:
public synchronized void add(int value){
this.count += value;
}
Обратите внимание на использовании синхронизированного ключевого слова в объявлении метода. Это говорит Java, что метод синхронизирован. Синхронный метод экземпляра в Java синхронизируется на экземпляре (объекте), владеющем этим методом. Таким образом, каждый экземпляр синхронизирует свои синхронные методы на другом объекте: экземпляр-владелец. Только один поток может выполняться внутри синхронизированного метода экземпляра. Если существует более одного экземпляра, тогда один поток за раз может выполнять внутри синхронизированного метода экземпляра для каждого экземпляра. Один поток на экземпляр.
Вот мое понимание. Если у меня есть работоспособный объект, который содержит экземпляр класса, содержащего указанный выше способ добавления, затем
Случай 1: У меня есть два потока, каждый из которых имеет же экземпляр класса, содержащего метод добавления, то только один из них сможет выполнить описанный выше метод добавления за раз. Следовательно, если один поток вызывает add
, тогда он НЕ МОЖЕТ быть предварительно освобожден до того, как он завершит выполнение?
Случай 2: Если обе мои нити имеют два различных экземпляров класса, содержащего метод добавления, то синхронизация не играет никакой роли в этом случае. Оба из них будут выполняться, как если бы синхронизация вообще не применялась.
Правильно ли я в своем понимании?
да, вы получили его. Но имейте в виду, что для case1 другой поток может изменить 'count' из другого метода. (возможно, 'add2'). Вы также можете синхронизировать доступ к ресурсам, используя выражение' synchronized (property) {} '. – dognose