使用Java模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。账户的初始余额是 20000 元,内个线程每次存储 1000 元,分别各存储 20000元,不允许出现错误数据。
时间: 2024-10-17 20:06:01 浏览: 26
在Java中,我们可以创建一个BankAccount类作为共享资源,并用两个单独的线程模拟存款操作。这里我会展示一个简化版的模拟,使用synchronized关键字保证了对账户余额的并发安全访问:
```java
import java.util.concurrent.atomic.AtomicInteger;
class BankAccount {
private AtomicInteger balance = new AtomicInteger(20000);
// 使用synchronized修饰的deposit方法来防止竞态条件
synchronized void deposit(int amount) {
if (amount > 0 && balance.addAndGet(amount) <= 40000) {
System.out.printf("存款成功,当前余额:%d%n", balance.get());
} else {
throw new IllegalArgumentException("存款金额无效");
}
}
}
public class BankDepositSimulation {
public static void main(String[] args) {
BankAccount account = new BankAccount();
Thread t1 = new Thread(() -> deposit(account, 1000, "线程1"));
Thread t2 = new Thread(() -> deposit(account, 1000, "线程2"));
t1.start();
t2.start();
try {
t1.join();
t2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 定义存款操作
private static void deposit(BankAccount account, int amount, String threadName) {
for (int i = 0; i < 20000; i++) { // 模拟存款20000次,每次1000元
account.deposit(amount);
}
System.out.println(threadName + "存款完成.");
}
}
阅读全文