并发编程陷阱:多线程竞争资源的Java案例

原创 ╰+攻爆jí腚メ 2024-12-04 04:09 37阅读 0赞

在Java中,多线程并发执行时可能会遇到资源竞争的问题。以下是一个具体的Java案例:

假设我们有一个简单的银行账户类(BankAccount),并且有两个线程(Thread1和Thread2)分别操作这个账户。

  1. public class BankAccount {
  2. private double balance;
  3. public BankAccount(double initialBalance) {
  4. this.balance = initialBalance;
  5. }
  6. public synchronized void deposit(double amount) {
  7. balance += amount;
  8. }
  9. public synchronized void withdraw(double amount) {
  10. if (amount > balance) {
  11. System.out.println("Insufficient balance");
  12. return;
  13. }
  14. balance -= amount;
  15. }
  16. // 返回当前账户的余额
  17. public synchronized double getBalance() {
  18. return balance;
  19. }
  20. }

在这个例子中,depositwithdraw方法被设计为线程安全的,通过synchronized关键字实现了对共享资源(这里指账户余额)的保护。

但是当两个或多个线程同时尝试修改同一个银行账户时,就会出现资源竞争的问题。例如,Thread1存款50,Thread2在同一时刻也存款50,那么账户余额将变为100,这显然是我们不想看到的结果。

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

发表评论

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

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

相关阅读