Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 

11.13. Домашняя работа 11.2

Цель задания

Научиться работать с syncronyzed блоками и избегать ситуации deadlock.

Условие задания

Проект Transactions. В банке (класс bank.Bank) есть счета (класс bank.Account) с двумя полями — money и accNumber.

Все счета хранятся внутри банка. Множество клиентов банка могут одновременно переводить деньги между счетами и запрашивать баланс по своему счёту. Всё происходит в highly concurrent (многопоточной) среде.

При этом транзакции на суммы > 50000 отправляются на проверку в службу безопасности. Можно считать, что таких транзакций не более 5% от всех. За проверку отвечает отдельный и уже реализованный метод bank.Bank.isFraud().

Служба безопасности не может обрабатывать более одной транзакции одновременно. Проверка занимает 1000 мс.

Если служба безопасности обнаружила мошенничество, необходимо заблокировать оба счёта, то есть запретить любые изменения остатков в дальнейшем.

Что нужно сделать

  1. Создайте метод transfer() класса bank.Bank, который переводит деньги с одного счёта на другой. Если сумма транзакции > 50000 — транзакция отправляется на проверку службе безопасности: вызывается метод isFraud(). Если возвращается true, то счета блокируются (как – на ваше усмотрение).
  2. Создайте метод getBalance() класса bank.Bank, который возвращает остаток на счёте по переданной строке номера аккаунта.

Рекомендации

  • Для решения задачи вы можете дорабатывать классы bank.Account и bank.Bank как угодно.
  • Дополнительно создайте тест (или набор тестов) для эмуляции реальной работы этих двух классов и проверки системы.
  • Проверяйте сумму на банковских счетах до запуска транзакций и после завершения — сумма в банке не должна измениться.
  • Удостоверьтесь, что ваша программа работает в многопоточном режиме. Для этого можете использовать утилиту visualVM.

Критерии оценки

«Зачёт» — программа позволяет в многопоточной среде работать банковским транзакциям без «потери» денег в банке и ситуаций deadlock.
«Незачёт» — задание не выполнено.