线程同步的实例:银行取钱II

1、类

package com.bjsxt.account;

public class Account2 {
	//属性
	private double balance = 500;
	private String name ;
	
	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	//方法
	public Account2(double balance, String name) {
		super();
		this.balance = balance;
		this.name = name;
	}
	
	public Account2() {
		super();
	}

	public synchronized void getmoney(Double money){
		if(this.balance>0&&this.balance>money){
			System.out.println(Thread.currentThread().getName()+"取了"+money+"元");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			this.balance -= money;
		}else{
			System.out.println(Thread.currentThread().getName()+"取款失败:"+this.balance);
		}
	}
}

2、取钱类

package com.bjsxt.account;

public class ATMBank2 implements Runnable{
	private Account2 acc;
	private double money;
	
	
	public ATMBank2(Account2 acc, double money) {
		super();
		this.acc = acc;
		this.money = money;
	}
	@Override
	public void run() {
		//取款
		for(int i = 0;i<5;i++){
			//同步方法
			acc.getmoney(200.);
		}
	}
}

3、测试类

package com.bjsxt.account;

public class TestAccount2 {
	public static void main(String[] args) {
		//创建银行类账号
		Account2 acc = new Account2();
		//创建线程类
		ATMBank2 atm = new ATMBank2(acc, 200.00);
		//代理
		Thread t1 = new Thread(atm, "张三");
		Thread t2 = new Thread(atm, "李四");
		//启动线程
		t1.start();
		t2.start();
	}
}

猜你喜欢

转载自blog.csdn.net/wyqwilliam/article/details/94408379
今日推荐