Задать вопрос
@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 Оценить Комментировать
Решения вопроса 1
@bimeg
synchornize(accounts[Math.min(from, to)])
{
    synchorize(accounts[Math.max(from, to)])
    {
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы