@per4uk2

Можна ли заблокировать два объекта в синхронизированом блоке?

public void transfer(int from, int to, double amount) {
        synchronized (accounts) {//double[] accounts - массив счетов в банке
                if (accounts[from] < amount) return;
                accounts[from] -= amount;
                accounts[to] += amount;
        }
}

Эта функция перекидывает деньги с одного счета на другой. В даном случае блокируеться весь масив accounts, можна ли както заблокировать только два счета(только accounts[from] и accounts[to]). Например чтобы выполнение transfer(1, 2, .. ) не блокировало transfer(3, 4, .. )?
  • Вопрос задан
  • 2394 просмотра
Решения вопроса 1
@bimeg
synchornize(accounts[Math.min(from, to)])
{
    synchorize(accounts[Math.max(from, to)])
    {
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
06 мая 2024, в 12:36
30000 руб./за проект
06 мая 2024, в 12:22
5000 руб./за проект
06 мая 2024, в 12:19
1500 руб./в час