Java多线程同步难题:银行转账示例

原创 深藏阁楼爱情的钟 2024-12-12 20:24 77阅读 0赞

在Java中,处理多线程的同步问题是非常关键的,尤其是在模拟银行转账这种涉及资金流动的情景。这里我们通过一个简单的例子来展示如何解决这个问题。

首先,创建两个线程类,一个负责存款,另一个负责取款:

  1. class BankAccount {
  2. private double balance = 0.0;
  3. // 存款方法
  4. public synchronized void deposit(double amount) {
  5. if (amount > 0) {
  6. balance += amount;
  7. System.out.println("存款成功,当前余额:" + balance);
  8. }
  9. }
  10. // 取款方法
  11. public synchronized void withdraw(double amount) {
  12. if (amount >= 0 && amount <= balance) {
  13. balance -= amount;
  14. System.out.println("取款成功,当前余额:" + balance);
  15. } else {
  16. System.out.println("取款失败,原因:金额超出余额或为负。");
  17. }
  18. }
  19. }
  20. class BankTransferThread extends Thread {
  21. private BankAccount account1, account2;
  22. public BankTransferThread(BankAccount account1, BankAccount account2) {
  23. this.account1 = account1;
  24. this.account2 = account2;
  25. }
  26. @Override
  27. public void run() {
  28. System.out.println("开始转账操作...");
  29. // 选择存款账户进行转账
  30. double depositAmount = 500.0; // 模拟转账金额
  31. account1.deposit(depositAmount);
  32. // 确认转账成功后,从取款账户中取出一部分
  33. double withdrawAmount = 250.0; // 取出的模拟金额
  34. account2.withdraw(withdrawAmount);
  35. System.out.println("转账操作完成。");
  36. }
  37. }

在这个例子中,我们创建了两个线程类,一个用于存款(BankTransferThread#account1),另一个用于取款(BankTransferThread#account2)。

在转账过程中,首先存款账户存款,然后取款账户取出一部分金额。这样就可以保证多线程环境下的资金同步问题。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,77人围观)

还没有评论,来说两句吧...

相关阅读

    相关 探讨Java线同步难题

    Java多线程编程中的同步问题是一个常见的挑战,主要表现在以下几个方面: 1. **竞态条件**:多个线程同时访问共享资源,可能会导致结果不一致。例如,两个线程同时修改一个变