首先银行存取钱问题(这里是对一个账户的操作)
第一个是一个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();
}
}