001 002 /** 003 * Konto version A. 004 * Uses synchronized methods to display, add and remove money from the account. 005 * @author Heinz Kredel. 006 */ 007 public class KontoA implements Konto { 008 009 private double stand; // Konto Stand 010 011 public KontoA() { stand = 0.0; } //sets "kontostand" to a desired value 012 013 public KontoA(double a) { stand = a; } 014 015 016 /** 017 * Displays account balance. 018 * @return stand. 019 */ 020 public synchronized double zeigeGeld() { return stand; } 021 022 023 /** 024 * @param b adds desired value to current account. 025 * @return s after booking (a call to "WorkA" is done, 026 * where current thread sleeps for a random time). 027 * current account balance is given back. 028 */ 029 public synchronized double putGeld(double b) { // stand += b 030 double s = stand + b; 031 WorkA.schaffen(100); 032 stand = s; 033 return s; 034 } 035 036 037 /** 038 * @param b draws desired value from the account. 039 * @return s gives back current account balance. 040 */ 041 public synchronized double getGeld(double b) { // stand -= b 042 double s = stand - b; 043 WorkA.schaffen(100); 044 stand = s; 045 return s; 046 } 047 048 } 049 050 051 /** 052 * Sending current thread to sleep for a random time. 053 */ 054 class WorkA { 055 056 /** 057 * @param max defines range of numbers for Math.random(). 058 */ 059 public static void schaffen(int max) { 060 try { 061 Thread.currentThread().sleep( (int)(max*Math.random()) ); 062 } catch (InterruptedException e) { 063 System.out.println("Dies sollte nicht passieren "+e); 064 } 065 } 066 }