package com.wuming.syn; //不安全的取钱 //两个人去银行取钱,账户 public class UnSafeBank {public static void main(String[] args) {//账户Account account = new Account(100,"结婚基金");Drawing you = new Drawing(account,50,"你");Drawing girlFriend = new Drawing(account,100,"girlFriend");you.start();girlFriend.start();}} //账户 class Account{int money;//余额String name;//卡名public Account(int money, String name) {this.money = money;this.name = name;} }//银行,模拟取款 class Drawing extends Thread{Account account;//账户//取了多少钱int drawingMoney;//现在手里有多少钱int nowMoney;public Drawing(Account account, int drawingMoney, String name) {super(name);//线程namethis.account = account;this.drawingMoney = drawingMoney;this.nowMoney = nowMoney;} //取钱@Overridepublic void run() {//判断有没有钱if(account.money-drawingMoney<0){System.out.println(Thread.currentThread().getName()+"钱不够,取不了");return;}//卡内余额=余额-你取的钱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);} }
结婚基金余额为:50
你手里的钱50
girlFriend钱不够,取不了
=================
模拟延时
package com.wuming.syn; //不安全的取钱 //两个人去银行取钱,账户 public class UnSafeBank {public static void main(String[] args) {//账户Account account = new Account(100,"结婚基金");Drawing you = new Drawing(account,50,"你");Drawing girlFriend = new Drawing(account,100,"girlFriend");you.start();girlFriend.start();}} //账户 class Account{int money;//余额String name;//卡名public Account(int money, String name) {this.money = money;this.name = name;} }//银行,模拟取款 class Drawing extends Thread{Account account;//账户//取了多少钱int drawingMoney;//现在手里有多少钱int nowMoney;public Drawing(Account account, int drawingMoney, String name) {super(name);//线程namethis.account = account;this.drawingMoney = drawingMoney;this.nowMoney = nowMoney;} //取钱@Overridepublic void run() {//判断有没有钱if(account.money-drawingMoney<0){System.out.println(Thread.currentThread().getName()+"钱不够,取不了");return;}//sleep可以放大问题的发生性try {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);} }
结婚基金余额为:0
girlFriend手里的钱100
结婚基金余额为:-50
你手里的钱50