线程--简单银行问题(面向对象)

首先银行存取钱问题(这里是对一个账户的操作)
第一个是一个bank也就是一个银行类:
主要就写了一个money的属性,对于方法,就是存钱和取钱
第二个就是bank的实现类因为用到了线程:所以叫 BankThread类:
这里用了随机数来判断进来时到底是存钱(a=0)还是取钱(a=1或2),因为这里存钱当一个线程运行时,其它线程也要运行,就会存在一点的安全性问题:因此涉及到线程的安全与同步具体的写法如下:
synchronized (obj) {
int b = (int)(Math.random()*3);
if(b==0){
bank.saveMoney();
}else {
bank.useMoney();
}
a–;
}

第三个就是测试类:BankTest
因为用的是接口(Runnable)实现线程的:因此一定要记住创建线程对象时,要借助Thread类.
/**
*

  • @author dch

*/
//银行类
public class Bank {

//money
private  double money;

//无参构造器
public Bank(){
}

//有参构造器
public Bank(double money){
	this.money = money;
}

//设置get/set方法
public double getMoney() {
	return money;
}

public void setMoney(double money) {
	this.money = money;
}

//存钱的方法
public void saveMoney(){
		money = money+100;
		System.out.println(Thread.currentThread().getName()+"存钱"+"--"+"现在的账户金额为: "+money);
}

//取钱的方法
public void useMoney(){
		if(money>0){
			money = money-100;
			System.out.println(Thread.currentThread().getName()+"取钱"+"--"+"现在的账户金额为: "+money);
		}else{
			System.out.println(Thread.currentThread().getName()+"账户金额不足");
		}
}

}

/**
*

  • @author dch

*/
//银行线程
public class BankThread implements Runnable{

//银行类
private Bank  bank;

Object obj = new Object();

//有参构造器
public BankThread(Bank bank){
	this.bank = bank;
}

@Override
public void run() {
	// TODO Auto-generated method stub
	int a = 20;
	while(a>0){
	synchronized (obj) {
		int b = (int)(Math.random()*3);
			if(b==0){
				bank.saveMoney();
			}else {
				bank.useMoney();
			}
			a--;
		}
	}
}

}

/**
*

  • @author dch

*/
//测试类
public class BankTest {

public static void main(String[] args) {
	
	Bank bank = new Bank(1000.0);
	BankThread bt = new BankThread(bank);
	Thread t1 = new Thread(bt, "男人");
	Thread t2 = new Thread(bt, "女人");
	t1.setPriority(1);
	t2.setPriority(10);
	t1.start();
	t2.start();
	
}

}

猜你喜欢

转载自blog.csdn.net/qq_41035395/article/details/88956059