java多线程存钱取钱_JAVA多线程----用--取钱问题1
时间: 2023-08-15 18:23:07 浏览: 144
好的,您的问题是关于Java多线程的存钱取钱问题。这是一个经典的多线程同步问题,可以通过使用synchronized关键字来实现线程安全。下面是一个简单的示例代码:
```java
public class BankAccount {
private int balance;
public BankAccount(int balance) {
this.balance = balance;
}
public synchronized void deposit(int amount) {
balance += amount;
System.out.println("Deposit successful. Balance: " + balance);
}
public synchronized void withdraw(int amount) {
if (balance < amount) {
System.out.println("Withdraw failed. Insufficient balance.");
return;
}
balance -= amount;
System.out.println("Withdraw successful. Balance: " + balance);
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount(1000);
// Create two threads to simulate deposit and withdraw
Thread depositThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
account.deposit(100);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
Thread withdrawThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
account.withdraw(200);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
depositThread.start();
withdrawThread.start();
}
}
```
在这个示例代码中,我们创建了一个银行账户类BankAccount,并在其中实现了deposit和withdraw方法,并使用synchronized关键字来保证线程安全。
在main方法中,我们创建了两个线程来模拟存款和取款操作,每个线程执行5次操作。我们使用Thread.sleep方法来模拟每个操作之间的间隔,以便更好地观察多线程操作的结果。
当多个线程同时访问BankAccount对象的deposit和withdraw方法时,synchronized关键字可以确保每个方法只能被一个线程访问,从而避免了竞争条件和数据不一致的问题。
希望这个示例代码能够回答您的问题。
阅读全文