diff --git a/src/exercicses/ex_g/Account.java b/src/exercicses/ex_g/Account.java new file mode 100644 index 0000000..830bfa1 --- /dev/null +++ b/src/exercicses/ex_g/Account.java @@ -0,0 +1,23 @@ +package exercicses.ex_g; + +public class Account { + private int balance; + + public void withdraw(int amount) { + synchronized (this) { + balance -= amount; + } + } + + public void deposit(int amount) { + synchronized (this) { + balance += amount; + } + } + + public int getBalance() { + synchronized (this) { + return balance; + } + } +} \ No newline at end of file diff --git a/src/exercicses/ex_g/BankEmployee.java b/src/exercicses/ex_g/BankEmployee.java new file mode 100644 index 0000000..f5e881f --- /dev/null +++ b/src/exercicses/ex_g/BankEmployee.java @@ -0,0 +1,26 @@ +package exercicses.ex_g; + +public class BankEmployee implements Runnable { + private String name; + private Account account; + + public BankEmployee(String name, Account account) { + this.name = name; + this.account = account; + } + + @Override + public void run() { + while (true) { + account.deposit((int) (Math.random() * 1000)); + System.out.println(name + " has deposited money on account with new balance " + account.getBalance()); + account.withdraw((int) (Math.random() * 1000)); + System.out.println(name + " has withdrawn money from the account with new balance " + account.getBalance()); + try { + Thread.sleep(100); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/src/exercicses/ex_g/TestingSynchronizedStatements.java b/src/exercicses/ex_g/TestingSynchronizedStatements.java new file mode 100644 index 0000000..7055492 --- /dev/null +++ b/src/exercicses/ex_g/TestingSynchronizedStatements.java @@ -0,0 +1,10 @@ +package exercicses.ex_g; + +public class TestingSynchronizedStatements { + public static void main(String[] args) { + // shared account object + Account account = new Account(); + (new Thread(new BankEmployee("Mrs Fournier", account))).start(); + (new Thread(new BankEmployee("Mr Schmidhalter", account))).start(); + } +}