账号提钱、存钱实例方法
public class Account { private int balance; private int maxBalance; public Account(int balance) { this.balance=balance; } //同步方法 取钱 public synchronized void transferOut(int money) { //线程同步 //synchronized(this) { String theadName=Thread.currentThread().getName(); if(balance>money) { try { Thread.sleep(1); }catch(InterruptedException e ){ e.printStackTrace(); } balance=balance-money; System.out.println(theadName+"转走:"+money+",余额:"+balance); }else { System.out.println(Thread.currentThread().getName()+"余额不足"); } // } } //同步方法 线程等待 存钱 public synchronized void save(int money) { while(balance+money>maxBalance) { try { this.wait(); //线程等待 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } String theadName=Thread.currentThread().getName(); balance=balance+money; System.out.println( "save "+money+"元"+" balance:"+balance); this.notifyAll();//唤醒其它线程 } //同步方法 线程等待 存钱 public synchronized void withdraw(int money) { while(money>balance) { try { this.wait(); //线程等待 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } balance=balance-money; System.out.println( "take "+money+"元"+" balance:"+balance); this.notifyAll();//唤醒其它线程 } }
测试方法
public class Test { public static void main(String[] args) { Account account2=new Account(8000); Thread t1=new Thread(new TakeMoney(account2),"son1"); Thread t2=new Thread(new TakeMoney(account2),"son2"); t1.start(); t2.start(); } }