diff --git a/src/main/java/dev/banking/model/BankAccount.java b/src/main/java/dev/banking/model/BankAccount.java index 115a4e0..745ede2 100644 --- a/src/main/java/dev/banking/model/BankAccount.java +++ b/src/main/java/dev/banking/model/BankAccount.java @@ -7,7 +7,11 @@ public class BankAccount { /* * Students may introduce additional fields - * if required by their synchronization strategy. + * such as: + * - Lock / ReentrantLock + * - ReadWriteLock + * - Object monitor + * - etc. */ public BankAccount(int accountId, long initialBalance) { @@ -20,34 +24,55 @@ public class BankAccount { } /* - * TODO - * Implement a thread-safe balance reader. + * TODO: + * Return the current balance in a thread-safe way. + * + * Requirements: + * - Must be safe under concurrent reads/writes + * - Should not block unnecessarily if using read/write locks */ public long getBalance() { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException("TODO: implement thread-safe balance read"); } /* - * TODO - * Implement a thread-safe deposit operation. + * TODO: + * Increase balance atomically. + * + * Requirements: + * - Must not lose updates under concurrency */ public void deposit(long amount) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException("TODO: implement thread-safe deposit"); } /* - * TODO - * Implement a thread-safe withdrawal operation. + * TODO: + * Decrease balance atomically. + * + * Requirements: + * - Must not cause race conditions + * - Negative balance handling is NOT required unless you decide + * to extend the system (optional) */ public void withdraw(long amount) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException("TODO: implement thread-safe withdraw"); } /* - * TODO - * Implement an atomic and deadlock-free transfer. + * TODO: + * Transfer money between two accounts atomically. + * + * IMPORTANT REQUIREMENTS: + * - Must be atomic (no partial transfer) + * - Must be deadlock-free + * - Must protect both source and target accounts + * + * HINT: + * - Consider global lock ordering using accountId + * - Or tryLock with retry strategy */ public void transfer(BankAccount target, long amount) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException("TODO: implement atomic deadlock-free transfer"); } } \ No newline at end of file