编写一个java程序实现多线程同步情况:假设某银行账户存款额的初值是2000元,用线程模拟两个用户分别从银行取款的情况,两个用户分4次分别从银行的同一个账户取款,每次取100元。
时间: 2023-12-10 22:40:12 浏览: 86
Java多线程实现银行存款与取款线程
4星 · 用户满意度95%
以下是Java代码实现多线程同步情况的例子:
```java
public class BankAccount {
private int balance = 2000; // 初始存款额为2000元
public synchronized void withdraw(int amount) { // 使用 synchronized 关键字实现线程同步
if (balance >= amount) {
balance -= amount;
System.out.println(Thread.currentThread().getName() + "取款成功,取款金额:" + amount + "元,余额:" + balance + "元");
} else {
System.out.println(Thread.currentThread().getName() + "取款失败,余额不足!");
}
}
}
public class BankDemo {
public static void main(String[] args) {
BankAccount account = new BankAccount();
// 创建两个用户线程
Thread user1 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
account.withdraw(100);
}
}
}, "User1");
Thread user2 = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
account.withdraw(100);
}
}
}, "User2");
// 启动两个用户线程
user1.start();
user2.start();
}
}
```
在上面的例子中,我们创建了一个名为 `BankAccount` 的类来表示银行账户,其中定义了一个 `balance` 变量表示账户余额。在 `withdraw` 方法中使用了 `synchronized` 关键字来实现线程同步,确保两个用户不会同时从账户中取款。然后我们创建了两个用户线程,并启动它们。当用户从账户中取款时,程序会输出相应的信息,包括当前线程的名称、取款金额和余额。
阅读全文