201711671103《Java程序设计》多线程的应用案例

两个人AB通过一个账户A在柜台取钱和B在ATM机取钱!

1.先创建一个Bank类

代码:package bank;
public class Bank {          
static int money = 1000;   // 假设一个账户有1000块钱

// 柜台Counter取钱的方法
public void Counter(int money) { // 参数是每次取走的钱
    Bank.money -= money;  //取钱后总数减少
    System.out.println("A取走了" + money + "还剩下" + (Bank.money));
    }
public void ATM(int money) {
    Bank.money -= money;//取钱后总数减少
    System.out.println("B取走了" + money + "还剩下" + (Bank.money));
}}

2.创建一个personA类

代码:package bank;
public class personA extends Thread{
    Bank bank; // 创建银行对象

// 通过构造器传入银行对象,确保两个人进入的是一个银行
    public personA(Bank bank) {
        this.bank = bank;
        }
//重写run方法,在里面实现使用柜台取钱    

@Override
    public void run() {
            while (Bank.money >= 100) {
            bank.Counter(100);// 每次取100块
            try {sleep(100); // 取完休息0.1秒
            } catch (InterruptedException e) {
                e.printStackTrace();
                }}}}

3.创建一个personB类

代码:package bank;
public class personB extends Thread {
    Bank bank;// 创建银行对象

// 通过构造器传入银行对象,确保两个人进入的是一个银行
    public personB(Bank bank) {
        this.bank = bank;
        }

// 重写run方法,在里面实现使用柜台取钱
    @Override
    public void run(){
    while (Bank.money >= 200) {
    bank.ATM(200);
    try {
        sleep(100);
        } catch (InterruptedException e) {
        e.printStackTrace();
}}}}

4.创建一个Mainclass类

代码:package bank;
public class MainClass {

//两个人AB通过一个账户A在柜台取钱和B在ATM机取钱
    public static void main(String[] args) {

// 实例化一个银行对象
        Bank bank = new Bank();

// 实例化两个人,传入同一个银行的对象
        personA pA = new personA(bank);
        personB pB = new personB(bank);

// 两个人开始取钱
        pA.start();
        pB.start();
         }}

运行结果:

猜你喜欢

转载自blog.csdn.net/CHENCHWT/article/details/84444846