{"id":23116298,"url":"https://github.com/nabilshadman/java-multithreaded-banking-app","last_synced_at":"2025-06-15T01:32:56.392Z","repository":{"id":176914064,"uuid":"376223764","full_name":"nabilshadman/java-multithreaded-banking-app","owner":"nabilshadman","description":"A thread-safe multithreaded banking app where one thread deposits money and another thread withdraws money from an account","archived":false,"fork":false,"pushed_at":"2024-12-04T11:43:14.000Z","size":210,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-04T01:28:12.172Z","etag":null,"topics":["java","java-development","multithreading","software-development"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nabilshadman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-12T06:57:45.000Z","updated_at":"2024-12-04T11:43:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"3a498e32-ae09-4f2d-8aba-88cabd7a20b2","html_url":"https://github.com/nabilshadman/java-multithreaded-banking-app","commit_stats":null,"previous_names":["nabilshadman/java-multithreaded-banking-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nabilshadman/java-multithreaded-banking-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Fjava-multithreaded-banking-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Fjava-multithreaded-banking-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Fjava-multithreaded-banking-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Fjava-multithreaded-banking-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nabilshadman","download_url":"https://codeload.github.com/nabilshadman/java-multithreaded-banking-app/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Fjava-multithreaded-banking-app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259908958,"owners_count":22930520,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","java-development","multithreading","software-development"],"created_at":"2024-12-17T04:15:57.715Z","updated_at":"2025-06-15T01:32:56.372Z","avatar_url":"https://github.com/nabilshadman.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Java Multithreaded Banking App\n\nA robust, thread-safe banking application that demonstrates concurrent programming principles in Java. The application simulates a banking system where multiple threads simultaneously handle deposits and withdrawals while maintaining transaction consistency and preventing race conditions.\n\n## 🎯 Features\n\n- **Thread-Safe Operations**: Secure handling of concurrent deposits and withdrawals\n- **Lock-Based Synchronization**: Uses `ReentrantLock` for thread coordination\n- **Condition Variables**: Implements `Condition` for thread communication\n- **Random Transaction Amounts**: Simulates real-world random deposit and withdrawal scenarios\n- **Deadlock Prevention**: Fair locking mechanism to prevent thread starvation\n- **Real-time Balance Updates**: Immediate balance reflection after each transaction\n\n## 🔧 Technical Implementation\n\n### Concurrency Mechanisms\n- `ReentrantLock` with fairness policy enabled\n- `Condition` variables for thread synchronization\n- `ExecutorService` for thread pool management\n- Thread sleep simulation for deposit operations\n- Automated thread shutdown handling\n\n### Key Components\n\n#### Account Class\n- Thread-safe balance management\n- Conditional withdrawal processing\n- Synchronized deposit handling\n- Real-time balance tracking\n\n#### Transaction Threads\n- **Deposit Thread**: Generates random deposits (1-10 units) every second\n- **Withdrawal Thread**: Attempts random withdrawals (1-10 units) continuously\n\n## 🚀 Getting Started\n\n### Prerequisites\n- Java Development Kit (JDK) 8 or higher\n- Java IDE (optional) - Eclipse, IntelliJ IDEA, or VS Code\n\n### Running the Application\n\n1. Clone the repository\n```bash\ngit clone https://github.com/yourusername/java-multithreaded-banking.git\ncd java-multithreaded-banking\n```\n\n2. Compile the application\n```bash\njavac AccountWithConditions.java\n```\n\n3. Run the application\n```bash\njava AccountWithConditions\n```\n\n## 📊 Sample Output\n\n```\nThread 1         Thread 2         Balance\nDeposit 5                        5\n                Wait for a deposit\nDeposit 3                        8\n                Withdraw 6       2\nDeposit 4                        6\n                Withdraw 5       1\n```\n\n![Banking App Demo](multithreaded_banking_app_demo.jpg)\n\n## 💡 Implementation Details\n\n### Thread Synchronization\n```java\nprivate static Lock lock = new ReentrantLock(true);\nprivate static Condition newDeposit = lock.newCondition();\n```\n- Fair lock ensures FIFO thread access\n- Condition variable manages deposit-withdrawal coordination\n\n### Deposit Processing\n```java\npublic void deposit(int amount) {\n    lock.lock();\n    try {\n        balance += amount;\n        newDeposit.signalAll();\n    }\n    finally {\n        lock.unlock();\n    }\n}\n```\n\n### Withdrawal Processing\n```java\npublic void withdraw(int amount) {\n    lock.lock();\n    try {\n        while(balance \u003c amount) {\n            newDeposit.await();\n        }\n        balance -= amount;\n    }\n    finally {\n        lock.unlock();\n    }\n}\n```\n\n## 🔒 Thread Safety Features\n\n1. **Atomic Operations**\n   - All balance modifications occur within locked sections\n   - Complete transaction isolation\n\n2. **State Consistency**\n   - Balance never goes negative\n   - All withdrawals are fully backed by deposits\n\n3. **Resource Management**\n   - Proper lock release through `finally` blocks\n   - Managed thread pool for controlled concurrency\n\n## 🛠️ Project Structure\n```\njava-multithreaded-banking/\n├── AccountWithConditions.java    # Main application file\n├── README.md                     # Documentation\n├── LICENSE.txt                   # License information\n└── multithreaded_banking_app_demo.jpg  # Application demo\n```\n\n## 🤝 Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/enhancement`)\n3. Commit your changes (`git commit -am 'Add new feature'`)\n4. Push to the branch (`git push origin feature/enhancement`)\n5. Create a Pull Request\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE.txt](LICENSE.txt) file for details.\n\n## 📚 Additional Resources\n\n- [Java Concurrency in Practice](https://jcip.net/)\n- [Oracle's Concurrency Tutorial](https://docs.oracle.com/javase/tutorial/essential/concurrency/)\n- [Java Lock Documentation](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html)\n\n## 📞 Contact\n\nFor questions and feedback, please open an issue in the repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnabilshadman%2Fjava-multithreaded-banking-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnabilshadman%2Fjava-multithreaded-banking-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnabilshadman%2Fjava-multithreaded-banking-app/lists"}