From 6111228c02664d95ef1aa82775cbbbf9960ae0be Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Tue, 10 Dec 2024 14:44:49 +0100 Subject: [PATCH] added ex G --- src/exercicses/ex_g/Account.java | 23 ++++++++++++++++ src/exercicses/ex_g/BankEmployee.java | 26 +++++++++++++++++++ .../ex_g/TestingSynchronizedStatements.java | 10 +++++++ 3 files changed, 59 insertions(+) create mode 100644 src/exercicses/ex_g/Account.java create mode 100644 src/exercicses/ex_g/BankEmployee.java create mode 100644 src/exercicses/ex_g/TestingSynchronizedStatements.java 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(); + } +}