Может кто-нибудь подробно объяснить, как это работает? 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. Или где то я не понял?