Может кто-нибудь подробно объяснить, как это работает?
public synchronized void withdraw(BigDecimal money) throws NotEnoughMoneyException {
BigDecimal newBalance = balance.subtract(money);
.......}
public void deposit(String money) {
deposit(new BigDecimal(money));
}
Насколько я понимаю, при синхронизации метода, происходит синхронизация по текущему экземпляру класса (this), а учитывая, что в перегруженном методе public void withdraw(String money) мы создаем каждый раз новый экземпляр класса - withdraw(new BigDecimal(money));
т.е. синхронизация идет по абсолютно разным объектам? И в теории любой поток будет входить в метод со своим экземпляром BigDecimal. Или где то я не понял?
TEMbI4
23 уровень
Как это работает?
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
TEMbI4
4 декабря 2020, 12:54
да действительно, че то сразу не вьехал.. спасибо
0
hidden #2322530
4 декабря 2020, 12:31
ты не понял. синхронизация идёт по объекту, у которого этот метод вызван.
this, это ссылка на объект, у которого данный метод вызван.
в обоих методах будет происходить синхронизация по объекту в переменной account. +2