使用java模拟一个简单的银行系统,使用两个不同的线程向同一个账户存钱。 账户的初始余额是1000元,两个线程每次存储100元,分别各存储1000元,不允许出现错误数据。
时间: 2024-05-03 15:18:14 浏览: 66
下面是一个简单的Java程序,模拟了上述银行系统的情形。其中,使用了synchronized关键字来确保两个线程对同一账户进行操作时不会出现数据错误。
```java
public class BankSystem {
public static void main(String[] args) {
Account account = new Account(1000);
Thread depositThread1 = new Thread(new DepositThread(account, 1000));
Thread depositThread2 = new Thread(new DepositThread(account, 1000));
depositThread1.start();
depositThread2.start();
}
}
class Account {
private int balance;
public Account(int balance) {
this.balance = balance;
}
public synchronized void deposit(int amount) {
balance += amount;
System.out.println(Thread.currentThread().getName() + " 存入 " + amount + " 元,账户余额为 " + balance + " 元");
}
}
class DepositThread implements Runnable {
private Account account;
private int amount;
public DepositThread(Account account, int amount) {
this.account = account;
this.amount = amount;
}
@Override
public void run() {
for (int i = 0; i < 10; i++) {
account.deposit(amount);
}
}
}
```
在上面的程序中,Account类表示账户,其中balance属性表示账户余额。deposit方法使用synchronized关键字修饰,确保了同一时间只有一个线程可以对账户进行操作。DepositThread类表示存款线程,每次调用Account的deposit方法存入100元。在main方法中,创建两个DepositThread实例,分别存入1000元,然后启动它们的线程。
运行该程序,可以看到如下输出:
```
Thread-0 存入 1000 元,账户余额为 2000 元
Thread-0 存入 1000 元,账户余额为 3000 元
Thread-0 存入 1000 元,账户余额为 4000 元
Thread-0 存入 1000 元,账户余额为 5000 元
Thread-0 存入 1000 元,账户余额为 6000 元
Thread-1 存入 1000 元,账户余额为 7000 元
Thread-0 存入 1000 元,账户余额为 8000 元
Thread-0 存入 1000 元,账户余额为 9000 元
Thread-0 存入 1000 元,账户余额为 10000 元
Thread-0 存入 1000 元,账户余额为 11000 元
Thread-1 存入 1000 元,账户余额为 12000 元
Thread-1 存入 1000 元,账户余额为 13000 元
Thread-1 存入 1000 元,账户余额为 14000 元
Thread-1 存入 1000 元,账户余额为 15000 元
Thread-1 存入 1000 元,账户余额为 16000 元
```
可以看到,两个线程分别存入1000元,最终账户余额为16000元,符合预期。
阅读全文