线程实例模仿人在银行取钱

  • Post author:
  • Post category:其他



package thread;

public class Bank{







private String name;



public String getName() {




return name;



}



public void setName(String name) {




this.name = name;



}



public Bank(String name) {




super();



this.name = name;



}



// 一个账户有2000块钱



static int money = 2000;






// 柜台取钱的方法



public void Counter(int money) {//每次取走的钱数



Bank.money -= money;//取钱后总额减少






}






// ATM取钱的方法



public void ATM(int money) {//每次取走的钱数



Bank.money -= money;//取钱后总额减少



}







private static String[] shareObj = {“true”}; // 创建一个静态钥匙//可以任意定义

static class PersonA extends Thread {




// 创建银行对象

Bank bank;

//通过构造器传入银行对象,确保两个人进入的是一个银行

public PersonA(Bank bank, String name) {




super(name);



this.bank = bank;



}

//重写run方法,在里面实现使用柜台取钱

@Override

public void run() {




synchronized (shareObj) {// 这个很重要属于银行的取款号码,一个人完成下一个人才能使用柜台取款

while (Bank.money >= 100) {




int money = 100;

bank.Counter(money);// 每次取100块

System.out.println(this.getName()+”在”+bank.getName()+”取走了” +money + “还剩下” +(Bank.money));

try {




shareObj.wait();//柜台工作人员暂停服务!



} catch (InterruptedException e) {




e.printStackTrace();



}

if(Bank.money==0){






System.err.println(“不好意思银行暂时没有现金了!”);





break;



}

try {


sleep(1000);//取完柜台工作人员休息1秒

} catch (InterruptedException e) {


e.printStackTrace();

}

}

}

}




static class PersonB extends Thread{




// 创建银行对象



Bank bank;



// 通过构造器传入银行对象,确保两个人进入的是一个银行



public PersonB(Bank bank, String name) {




super(name);



this.bank = bank;



}



// 重写run方法,在里面实现使用柜台取钱



@Override



public void run() {






synchronized (shareObj) {




while (Bank.money >= 200) {






int money = 200;



bank.ATM(money);// 每次取200块



System.out.println(this.getName()+”在”+bank.getName()+”取走了” + money + “还剩下” +(Bank.money));



shareObj.notifyAll();






if(Bank.money==0){






System.err.println(this.getName()+”在”+bank.getName()+”把剩余的钱取完了!”);





break;



}



try {




sleep(1000);// ATM反应1秒



} catch (InterruptedException e) {




e.printStackTrace();



}



}



}



}



}



//三个人在银行取钱

public static void main(String[] args) {




//银行的柜台

Bank bank1 = new Bank(“银行柜台”);

//银行的取款机

Bank bank2 = new Bank(“银行ATM机”);

// 实例化三个人,在同一个银行取钱

PersonA pA = new PersonA(bank1,”A”);

PersonA PA2  = new PersonA(bank1,”B”);

PersonB pB = new PersonB(bank2,”C”);

//pA和PA2在柜台排队取钱:PB在ATM机取钱

pA.start();

PA2.start();

pB.start();



}



}

}



版权声明:本文为bx646574424原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。