java假设某银行账户存款额的初值是2000元,用线程模拟两个用户分别从银行取款的情况,两个用户分4次分别从银行的同一个账户取款,每次取100元。
时间: 2023-12-03 17:47:20 浏览: 165
以下是Java代码实现:
```java
public class BankAccount {
private int balance = 2000; // 初始存款额为2000元
public synchronized void withdraw(int amount) {
if (balance >= amount) {
System.out.println(Thread.currentThread().getName() + " withdraws " + amount + " yuan.");
balance -= amount;
System.out.println("Balance: " + balance + " yuan.");
} else {
System.out.println(Thread.currentThread().getName() + " withdraws failed due to insufficient balance.");
}
}
}
public class User implements Runnable {
private BankAccount account;
public User(BankAccount account) {
this.account = account;
}
@Override
public void run() {
for (int i = 1; i <= 4; i++) {
account.withdraw(100);
try {
Thread.sleep(500); // 模拟用户操作时间
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
User user1 = new User(account);
User user2 = new User(account);
Thread thread1 = new Thread(user1, "User1");
Thread thread2 = new Thread(user2, "User2");
thread1.start();
thread2.start();
}
}
```
在上面的代码中,BankAccount 类表示银行账户,有一个 withdraw 方法用于取款。在 withdraw 方法上使用 synchronized 关键字,保证了该方法的原子性,即同一时刻只能有一个线程访问该方法。
User 类表示用户,实现了 Runnable 接口,run 方法中调用 BankAccount 的 withdraw 方法取款。在每次取款后使用 Thread.sleep 方法模拟用户的操作时间。
Main 类创建了两个用户对象和两个线程对象,分别启动两个线程并开始模拟两个用户从银行账户取款的过程。
阅读全文