public class Test {
public static void main(String[] args) throws InterruptedException {
Account account = new Account();
account.setMoney(100);
Bank bank = new Bank(account);
// 三个人同时去取钱
new Thread(() -> {
bank.withdrawMoney(10);
}, "我").start();
new Thread(() -> {
bank.withdrawMoney(30);
}, "你").start();
new Thread(() -> {
bank.withdrawMoney(10);
}, "她").start();
Thread.sleep(1000);
System.out.println("账户剩余钱:" + account.getMoney());
}
}
// 银行
class Bank {
private final Account account;
public Bank(Account account) {
this.account = account;
}
public void withdrawMoney(double money) {
synchronized (account) {
double restOfMoney = account.getMoney() - money;
if (restOfMoney <= 0) {
System.out.println(Thread.currentThread().getName() + "取钱失败 账户余额不足");
return;
}
System.out.println(Thread.currentThread().getName() + "取走了" + money + " 账户剩余钱:" + restOfMoney);
account.setMoney(restOfMoney);
}
}
}
// 账户
class Account {
private double money;
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
java 多线程场景-取钱
最新推荐文章于 2021-10-23 15:58:45 发布