Advertisement
jaVer404

level17.lesson10.home08

Oct 7th, 2015
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.42 KB | None | 0 0
  1. package com.javarush.test.level17.lesson10.home08;
  2.  
  3. /* Банкомат
  4. Разберись, как работает программа
  5. Во время тестирования лог содержит следующее:
  6. .....
  7. Добавляем 100, на счету 1100
  8. Добавляем 100, на счету 1200
  9. Тратим 1000, на счету 100
  10. Недостаточно денег
  11. .....
  12.  
  13. Создан баг: При списании денег со счета теряются деньги
  14. Найти и исправить ошибку
  15. */
  16.  
  17. public class Bankomat {
  18.  
  19.     static BankAccount account = new BankAccount("Amigo");
  20.  
  21.     public static volatile boolean isStopped;
  22.  
  23.     public static void main(String[] args) throws InterruptedException {
  24.         addMoney.start();
  25.         new SpendThread();
  26.         new SpendThread();
  27.         new SpendThread();
  28.         Thread.sleep(4000);
  29.         isStopped = true;
  30.     }
  31.  
  32.     private static Thread addMoney = new Thread() {
  33.         @Override
  34.         public void run() {
  35.             while (!isStopped) {
  36.                 account.deposit("1000");            //кладем на счет
  37.                 try {
  38.                     Thread.sleep(1000);
  39.                 } catch (InterruptedException e) {
  40.                     break;
  41.                 }
  42.             }
  43.         }
  44.     };
  45.  
  46.  
  47.     public static class SpendThread extends Thread {
  48.         public SpendThread() {
  49.             start();
  50.         }
  51.  
  52.         @Override
  53.         public void run() {
  54.             while (!isStopped) {
  55.                 try {
  56.                     account.withdraw("100");             //снимаем со счета
  57.                 } catch (NotEnoughMoneyException e) {
  58.                     System.out.println("Недостаточно денег");
  59.                 }
  60.                 try {
  61.                     Thread.sleep(100);
  62.                 } catch (InterruptedException e) {
  63.                     break;
  64.                 }
  65.             }
  66.         }
  67.     }
  68.  
  69.     ;
  70. }
  71. /*----------------------------------------------------------*/
  72. package com.javarush.test.level17.lesson10.home08;
  73.  
  74. import java.math.BigDecimal;
  75.  
  76. public class BankAccount {
  77.     private BigDecimal balance;
  78.     private String owner;
  79.  
  80.     public BankAccount(String owner) {
  81.         this(BigDecimal.ZERO, owner);
  82.     }
  83.  
  84.     public BankAccount(BigDecimal balance, String owner) {
  85.         this.balance = balance;
  86.         this.owner = owner;
  87.     }
  88.  
  89.     public synchronized void deposit(BigDecimal money) {
  90.         BigDecimal newBalance = balance.add(money);
  91.         System.out.println("Добавляем " + money + ", на счету " + newBalance);
  92.         balance = newBalance;
  93.     }
  94.  
  95.     public synchronized void withdraw(BigDecimal money) throws NotEnoughMoneyException {
  96.         BigDecimal newBalance = balance.subtract(money);
  97.  
  98.         if (newBalance.compareTo(BigDecimal.ZERO) < 0) throw new NotEnoughMoneyException();
  99.  
  100.         balance = newBalance;
  101.         System.out.println("Тратим " + money + ", на счету " + balance);
  102.     }
  103.  
  104.     public void deposit(String money) {
  105.         deposit(new BigDecimal(money));
  106.     }
  107.  
  108.     public void withdraw(String money) throws NotEnoughMoneyException {
  109.         withdraw(new BigDecimal(money));
  110.     }
  111. }
  112. /*-----------------------------------------*/
  113. package com.javarush.test.level17.lesson10.home08;
  114.  
  115. public class NotEnoughMoneyException extends Exception {
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement