Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.javarush.test.level17.lesson10.home08;
- /* Банкомат
- Разберись, как работает программа
- Во время тестирования лог содержит следующее:
- .....
- Добавляем 100, на счету 1100
- Добавляем 100, на счету 1200
- Тратим 1000, на счету 100
- Недостаточно денег
- .....
- Создан баг: При списании денег со счета теряются деньги
- Найти и исправить ошибку
- */
- public class Bankomat {
- static BankAccount account = new BankAccount("Amigo");
- public static volatile boolean isStopped;
- public static void main(String[] args) throws InterruptedException {
- addMoney.start();
- new SpendThread();
- new SpendThread();
- new SpendThread();
- Thread.sleep(4000);
- isStopped = true;
- }
- private static Thread addMoney = new Thread() {
- @Override
- public void run() {
- while (!isStopped) {
- account.deposit("1000"); //кладем на счет
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- break;
- }
- }
- }
- };
- public static class SpendThread extends Thread {
- public SpendThread() {
- start();
- }
- @Override
- public void run() {
- while (!isStopped) {
- try {
- account.withdraw("100"); //снимаем со счета
- } catch (NotEnoughMoneyException e) {
- System.out.println("Недостаточно денег");
- }
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- break;
- }
- }
- }
- }
- ;
- }
- /*----------------------------------------------------------*/
- package com.javarush.test.level17.lesson10.home08;
- import java.math.BigDecimal;
- public class BankAccount {
- private BigDecimal balance;
- private String owner;
- public BankAccount(String owner) {
- this(BigDecimal.ZERO, owner);
- }
- public BankAccount(BigDecimal balance, String owner) {
- this.balance = balance;
- this.owner = owner;
- }
- public synchronized void deposit(BigDecimal money) {
- BigDecimal newBalance = balance.add(money);
- System.out.println("Добавляем " + money + ", на счету " + newBalance);
- balance = newBalance;
- }
- public synchronized void withdraw(BigDecimal money) throws NotEnoughMoneyException {
- BigDecimal newBalance = balance.subtract(money);
- if (newBalance.compareTo(BigDecimal.ZERO) < 0) throw new NotEnoughMoneyException();
- balance = newBalance;
- System.out.println("Тратим " + money + ", на счету " + balance);
- }
- public void deposit(String money) {
- deposit(new BigDecimal(money));
- }
- public void withdraw(String money) throws NotEnoughMoneyException {
- withdraw(new BigDecimal(money));
- }
- }
- /*-----------------------------------------*/
- package com.javarush.test.level17.lesson10.home08;
- public class NotEnoughMoneyException extends Exception {
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement