public class ATM { Account acc; //作为演示,省略了密码验证 public boolean login(String name) { if (acc != null) throw new IllegalArgumentException("Already logged in!"); acc = new Account(name); return true; }
public void deposit(float amt) { acc.deposit(amt); }
public void withdraw(float amt) throws InsufficientBalanceException { acc.withdraw(amt); }
public float getBalance() { return acc.getBalance(); }
public class ATMTester { private static final int NUM_OF_ATM = 10; public static void main(String[] args) { ATMTester tester = new ATMTester(); final Thread thread[] = new Thread[NUM_OF_ATM]; final ATM atm[] = new ATM[NUM_OF_ATM]; for (int i=0; i<NUM_OF_ATM; i++) { atm[i] = new ATM(); thread[i] = new Thread(tester.new Runner(atm[i])); thread[i].start(); } } class Runner implements Runnable { ATM atm; Runner(ATM atm) { this.atm = atm; } public void run() { atm.login("John"); //查询余额 float bal = atm.getBalance(); try { Thread.sleep(1); //模拟人从查询到取款之间的间隔 } catch (InterruptedException e) { // ignore it } try { System.out.println("Your balance is:" + bal); System.out.println("withdraw:" + bal * 0.8f); atm.withdraw(bal * 0.8f); System.out.println("deposit:" + bal * 0.8f); atm.deposit(bal * 0.8f); } catch (InsufficientBalanceException e1) { System.out.println("余额不足!"); } finally { atm.logout(); } } } } 运行ATMTester,结果如下(每次运行结果都有所差异):
Your balance is:1000.0 withdraw:800.0 deposit:800.0 Your balance is:1000.0 Your balance is:1000.0 withdraw:800.0 withdraw:800.0 余额不足! Your balance is:200.0 Your balance is:200.0 Your balance is:200.0 余额不足! Your balance is:200.0 Your balance is:200.0 Your balance is:200.0 Your balance is:200.0 withdraw:160.0 withdraw:160.0 withdraw:160.0 withdraw:160.0 withdraw:160.0 withdraw:160.0 withdraw:160.0 deposit:160.0 余额不足! 余额不足! 余额不足! 余额不足! 余额不足! 余额不足!