多线程案例:银行取钱

2023-12-19

//不安全取钱

//两个人去银行取钱,账户

//银行取钱:给账户上锁

public class UnsafeBank {

public static void main(String[] args) {

//账户

Account3 account = new Account3(1000,"生活费");

Drawing you = new Drawing(account,500,"你");

Drawing son = new Drawing(account,1000,"儿子");

you.start();

son.start();

}

}

//账户

class Account3{

int money; //余额

String name;

public Account3(int money, String name) {

this.money = money;

this.name = name;

}

}

//银行:模拟取款

class Drawing extends Thread{

Account3 account;//账户

int drawingMoney;

//现在手里还有多少钱

int nowMoney;

public Drawing(Account3 account,int drawingMoney,String name){

super(name);

this.account=account;

this.drawingMoney=drawingMoney;

}

//取钱

//synchronized默认锁this.

@Override

public  void run(){

synchronized (account){

//判断有没有钱

if (account.money-drawingMoney<0){

System.out.println(Thread.currentThread().getName()+"钱不够取不了");

return;

}

try {//sleep放大问题的发生性

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

//卡里的余额=余额-你取的钱

account.money=account.money-drawingMoney;

//你手里的钱

nowMoney=nowMoney+drawingMoney;

System.out.println(account.name+"余额为:"+account.money);

//Thread.currentThread().getName()=this.getName()

System.out.println(this.getName()+"手里的钱:"+nowMoney);

}

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程案例:银行取钱 的相关文章

随机推荐