利用线程通信机制完成向银行账户存取款的操作。
class Account1{ //账户缓冲区
private String name;
private int value;
public void put(int i){ //存入金额i;
value=value+i; //存入时 value值增加
}
public int get(int i){ //取金额i,返回实际取到的金额
if(value>i){
value=value-i; //取走时,value值减少
}else{
i=value; //金额不够时,取走全部金额
value=0;
}
return i;
}
public int howmoney(){ //查看账户的金额
return value;
}
}
class Save implements Runnable{ //存款线程类
private Account1 a1;
private int amount;
public Save(Account1 a1,int amount){
this.a1=a1;
this.amount=amount;
}
@Override
public void run() {
synchronized(a1){ //锁定账户对象
int k=a1.howmoney();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
a1.put(amount);
System.out.println("现有"+k+",存入"+amount+",余额为"+a1.howmoney());
}
}
}
class GetMoney implements Runnable{ //取款线程类
private Account1 a1;
private int amount;
public GetMoney(Account1 a1,int amount){
this.a1=a1;
this.amount=amount;
}
@Override
public void run() {
synchronized(a1){ //锁定账户对象
int k=a1.howmoney();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("现有"+k+",取走"+a1.get(amount)+",余额为"+a1.howmoney());
}
}
}
public class ThreadDemo7 {
/**
* @param args
*/
public static void main(String[] args) {
Account1 a1=new Account1();
new Thread(new Save(a1,100)).start();
new Thread(new Save(a1,200)).start();
new Thread(new GetMoney(a1,100)).start();
}
}