线程代码

利用线程通信机制完成向银行账户存取款的操作。

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();
		

	}

}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值