多线程银行存取

 
 
 
  
更新以后的,细节有所改动
package excise; /* * 需求:现有男孩女孩和一个两个共同拥有的银行账户 * 男孩的负责向账户存钱 * 女孩负责从账户花钱 * 存钱时不能取钱,取钱时不能存钱 * 思路:测试类BankDemo,boy类存钱,girl类花钱,Bank类提供存取钱的方法和账户。 * */ /* *wait()方法只能在锁(synchronized)中用,不然报错 * */ public class BankDemo { public static void main(String[] args) { Bank bank = new Bank(500); Thread boy = new Boy(bank, "男孩"); Thread girl1 = new Girl(bank, "女孩1"); Thread girl2 = new Girl(bank, "女孩2"); Thread girl3 = new Girl(bank, "女孩3"); boy.start(); girl1.start(); girl2.start(); girl3.start(); } } class Bank{ private int account = 1000;//账户余额 public Bank(int account) { this.account = account; } //往账户中存money public synchronized void save(int money) { account = account+money; String name = Thread.currentThread().getName(); System.out.println(name+"--存入"+money+",当前余额为:"+account); //存钱之后将等待池中的有关Bank线程唤醒 this.notifyAll(); } //从账户中取money public synchronized void withdraw(int money) { while(account < money) { String name = Thread.currentThread().getName(); System.out.println(name+"--账户余额不足!!!"); try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } account -= money; String name = Thread.currentThread().getName(); System.out.println(name+"--取款"+money+",当前账户余额为:"+account); } } class Boy extends Thread{ private Bank bank; public Boy() {} public Boy(Bank bank,String name) { this.bank = bank; setName(name); } public void run () { while(true) { int money = (int)(Math.random()*1000+1); bank.save(money); try { sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } } class Girl extends Thread{ private Bank bank; public Girl() { } public Girl(Bank bank,String name) { this.bank = bank; setName(name); } public void run () { while (true) { int money = (int)(Math.random()*1000+1); System.out.println(getName()+"想花:"+money); bank.withdraw(money); try { sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } } -----------------------------------------------------------------------------------------------------------------------------

package excise;/* * 需求:现有男孩女孩和一个两个共同拥有的银行账户 * 男孩的负责向账户存钱 * 女孩负责从账户花钱 * 存钱时不能取钱,取钱时不能存钱 * 思路:测试类BankDemo,boy类存钱,girl类花钱,Bank类提供存取钱的方法和账户。 * */public class BankDemo {public static void main(String[] args) {Bank bank = new Bank();Thread boy = new Boy(bank, 5000);Thread girl = new Girl(bank, 5000);boy.start();girl.start();}}class Bank{private int account = 8000;//账户余额//往账户中存moneypublic void save(int money) {boolean flag = true;while(flag) {synchronized(this) {account = account+money;System.out.println("存入5000,当前余额为:"+account);//模拟存钱过程try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}}//从账户中取moneypublic void withdraw(int money) {boolean flag = true;while(flag) {//只要余额不足,就睡一会,睡接着判断余额是否足够,不够就接着余额不足while(account < money) {System.out.println("账户余额不足!!!");try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}synchronized(this) {account = account -money;System.out.println("取款5000,当前账户余额为:"+account);//模拟取钱过程。。。try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}}}}}class Boy extends Thread{private Bank bank;private int money;public Boy(Bank bank,int money) {this.bank = bank;this.money = money;}public void run () {bank.save(money);}}class Girl extends Thread{private Bank bank;private int money ;public Girl(Bank bank,int money) {this.bank = bank;this.money = money;}public void run () {bank.withdraw(money);}}
第一次博客!!!!
从今天开始记录我程序猿爬墙之旅。

猜你喜欢

转载自blog.csdn.net/You_are_my_Mr_Right/article/details/80204838