Advertisement
Guest User

Untitled

a guest
Jun 30th, 2015
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.90 KB | None | 0 0
  1. import java.util.ArrayList;
  2.  
  3. public class Bank {
  4. private ArrayList<Account> accounts;
  5.  
  6. public Bank(int accountsCount) {
  7. accounts = new ArrayList<Account>();
  8. for (int i = 0; i < accountsCount; i++) {
  9. accounts.add(new Account(i));
  10. }
  11. }
  12.  
  13. public Account getRandomAccount() {
  14. return (Account) accounts.get((int) (Math.random() * accounts.size()));
  15. }
  16.  
  17. public void printSummary() {
  18. for (Account a : accounts)
  19. System.out.println(a.toString());
  20. }
  21. }
  22.  
  23. public class Account {
  24. public static Account account;
  25. private static int balance = 1000;
  26. private int number;
  27.  
  28. public Account(int number) {
  29. this.number = number;
  30. }
  31.  
  32. public static synchronized int getBalance() {
  33. return balance;
  34. }
  35.  
  36. public synchronized void withdraw(Client client, int bal) {
  37. try {
  38.  
  39. if (balance >= bal) {
  40. System.out.println(client.getName() + " "
  41. + "is trying to withdraw from account " + number);
  42. try {
  43. Thread.sleep(100);
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. }
  47. balance = balance - bal;
  48. System.out.println(client.getName() + " "
  49. + "has completed withdrawal from account " + number);
  50. } else {
  51. System.out
  52. .println(client.getName()
  53. + " "
  54. + "doesn't have enough money for withdraw from account "
  55. + number);
  56. }
  57. System.out.println(client.getName() + " withdrawal value: "
  58. + balance + " from account " + number);
  59. } catch (Exception e) {
  60. e.printStackTrace();
  61. }
  62. }
  63.  
  64. public synchronized void deposit(Client client, int bal) {
  65. try {
  66. if (bal > 0) {
  67. System.out.println(client.getName() + " "
  68. + "trying to deposit on account " + number);
  69. try {
  70. Thread.sleep(100);
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }
  74. balance = balance + bal;
  75. System.out.println(client.getName() + " "
  76. + "has completed the deposit on account " + number);
  77. } else {
  78. System.out.println(client.getName() + " "
  79. + " doesn't have enough money for deposit on account "
  80. + number);
  81. }
  82. System.out.println(client.getName() + " deposited " + balance
  83. + " on account " + number);
  84. } catch (Exception e) {
  85. e.printStackTrace();
  86. }
  87. }
  88.  
  89. @Override
  90. public String toString() {
  91. return "Account " + number + " balance: " + balance;
  92. }
  93. }
  94.  
  95. public class Client {
  96. private String name;
  97.  
  98. public Client(String name) {
  99. this.name = name;
  100. }
  101.  
  102. public String getName() {
  103. return name;
  104. }
  105.  
  106. public void setName(String name) {
  107. this.name = name;
  108. }
  109.  
  110. @Override
  111. public String toString() {
  112. return name;
  113. }
  114. }
  115.  
  116. import java.util.Random;
  117. import java.util.logging.Level;
  118. import java.util.logging.Logger;
  119.  
  120. public class Main extends Thread implements Runnable {
  121.  
  122. private static final int CLIENT_COUNT = 5;
  123. private static final int CLIENT_ITERATIONS = 5;
  124. private static final int ACCOUNTS_COUNT = 2;
  125.  
  126. private static final int RAND_MIN = 10;
  127. private static final int RAND_MAX = 10;
  128. private static final int RAND_MIN_AMOUNT = 10;
  129. private static final int RAND_MAX_AMOUNT = 200;
  130.  
  131. private static Bank bank = new Bank(ACCOUNTS_COUNT);
  132. private Client client;
  133.  
  134. public Main(Client c) {
  135. client = c;
  136. }
  137.  
  138. private int randAmount() {
  139. return (new Random()).nextInt((RAND_MAX_AMOUNT - RAND_MIN_AMOUNT) + 1)
  140. + RAND_MIN_AMOUNT;
  141. }
  142.  
  143. private int randSleepTime() {
  144. return (new Random()).nextInt((RAND_MAX - RAND_MIN) + 1) + RAND_MIN;
  145. }
  146.  
  147. public static void main(String[] args) {
  148. for (int i = 0; i < CLIENT_COUNT; i++) {
  149. Main ts1 = new Main(new Client("Person " + i));
  150. ts1.start();
  151. }
  152. }
  153.  
  154. private void clientWork() {
  155. try {
  156. Thread.sleep(randSleepTime());
  157. } catch (InterruptedException ex) {
  158. Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
  159. }
  160. }
  161.  
  162. @Override
  163. public void run() {
  164. for (int i = 0; i < CLIENT_ITERATIONS; i++) {
  165. Account acc = bank.getRandomAccount();
  166. clientWork();
  167. acc.withdraw(client, randAmount());
  168. clientWork();
  169. acc.deposit(client, randAmount());
  170. }
  171. System.out.println("#Account balance: " + Account.getBalance());
  172. }
  173. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement