并发编程陷阱:多线程竞争资源的Java案例
在Java中,多线程并发执行时可能会遇到资源竞争的问题。以下是一个具体的Java案例:
假设我们有一个简单的银行账户类(BankAccount),并且有两个线程(Thread1和Thread2)分别操作这个账户。
public class BankAccount {
private double balance;
public BankAccount(double initialBalance) {
this.balance = initialBalance;
}
public synchronized void deposit(double amount) {
balance += amount;
}
public synchronized void withdraw(double amount) {
if (amount > balance) {
System.out.println("Insufficient balance");
return;
}
balance -= amount;
}
// 返回当前账户的余额
public synchronized double getBalance() {
return balance;
}
}
在这个例子中,deposit
和withdraw
方法被设计为线程安全的,通过synchronized
关键字实现了对共享资源(这里指账户余额)的保护。
但是当两个或多个线程同时尝试修改同一个银行账户时,就会出现资源竞争的问题。例如,Thread1存款50,Thread2在同一时刻也存款50,那么账户余额将变为100,这显然是我们不想看到的结果。
还没有评论,来说两句吧...