请实现一个银行账户类 BankAccount,该类包括以下方法:public BankAccount(String name, double balance):创建一个账户,初始余额为 balance ,账户持有人为 name 。
public synchronized double withdraw(double amount):从账户中取出指定金额 amount ,返回取款后的余额。如果取款金额大于余额,抛出异常。
public synchronized double deposit(double amount):向账户中存入指定金额 amount ,返回存款后的余额。
注意事项:
这些方法都需要用 synchronized 实现同步互斥资源的共享访问。取款时需要检查账户余额是否足够,不足时必须抛出异常。存款时不需要检查余额,只需要将金额加入账户余额即可。
创建测试实例,帐户余额100,多线程存入和取出的操作,打印出帐户余额。
public class BankAccount {
private String name;
private double balance;
public BankAccount(String name, double balance) {
this.name = name;
this.balance = balance;
}
public synchronized double withdraw(double amount) {
if (amount > balance) {
throw new IllegalArgumentException("Insufficient balance");
}
balance -= amount;
System.out.println("取钱: " + amount + ", 取完之后: " + balance);
return balance;
}
public synchronized double deposit(double amount) {
balance += amount;
System.out.println("存钱: " + amount + ", 存完之后: " + balance);
return balance;
}
public static void main(String[] args) {
BankAccount account = new BankAccount("张三", 100);
Thread depositThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
double amount = Math.random() * 100;
account.deposit(amount);
}
});
Thread withdrawThread = new Thread(() -> {
for (int i = 0; i < 5; i++) {
double amount = Math.random() * 100;
try {
account.withdraw(amount);
} catch (IllegalArgumentException e) {
System.out.println("余额不足" + e.getMessage());
}
}
});
depositThread.start();
withdrawThread.start();
try {
depositThread.join();
withdrawThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Final balance: " + account.balance);
}
}
package com;
public class BankAccount {
private String name;
private double balance = 0;
public BankAccount(String name, double balance) {
this.name = name;
this.balance = balance;
}
public synchronized void deposit(double amount) {
balance += amount;
System.out.println("成功存入银行" + amount + "元");
}
public synchronized void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
System.out.println("成功取出" + amount + "元");
} else {
System.out.println("余额不足");
}
}
public synchronized void checkBalance() {
System.out.println("账户余额:" + balance);
}
public synchronized String getName() {
return name;
}
public synchronized void setName(String name) {
this.name = name;
}
}