feat(bank-account): add student implementation template for concurrency assignment

- Provide clean BankAccount skeleton for student implementation
- Define thread-safety responsibilities for getBalance, deposit, withdraw, and transfer
- Add detailed TODO comments clarifying concurrency and deadlock requirements
- Include hints for lock strategy and global ordering for transfer method
- Ensure compatibility with DemoApplication and stress testing infrastructure
This commit is contained in:
2026-06-05 20:48:53 +03:30
parent 353873f10d
commit a063274fb9
@@ -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");
}
}