java多线程同步情况:假设某银行账户存款额的初值是2000元,用线程模拟两个用户分别从银行取款的情况,两个用户分4次分别从银行的同一个账户取款,每次取100元
时间: 2023-11-24 11:06:59 浏览: 161
在Java多线程中,要保证线程安全,需要使用同步机制。对于这个银行账户的例子,可以使用synchronized关键字来实现同步。
下面是一个使用synchronized关键字实现同步的代码示例:
```java
public class BankAccount {
private int balance = 2000;
public synchronized void withdraw(int amount) {
if (balance >= amount) {
balance -= amount;
System.out.println(Thread.currentThread().getName() + " withdraws " + amount + " yuan.");
} else {
System.out.println(Thread.currentThread().getName() + " cannot withdraw " + amount + " yuan.");
}
}
}
public class User implements Runnable {
private BankAccount account;
public User(BankAccount account) {
this.account = account;
}
public void run() {
for (int i = 1; i <= 4; i++) {
account.withdraw(100);
}
}
}
public class Test {
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方法使用了synchronized关键字,以确保任何时刻只有一个线程可以访问这个方法。这样就能够保证在两个用户同时从同一个账户中取款时,不会出现数据不一致的情况。
当用户线程调用BankAccount类中的withdraw方法时,会先判断当前账户余额是否足够,如果足够,则从账户中扣除相应金额,并输出取款信息;如果不足,则输出取款失败信息。
在Test类中创建了两个用户对象和两个线程对象,并启动这两个线程。这样就可以模拟两个用户从同一个账户中取款的情况,且保证数据的一致性。
阅读全文