Java多線程之使用ATM與櫃台對同一賬戶取錢


錢數要設置成靜態的變量,兩種取錢方式操作的是同一個銀行賬戶!

廢話不多說,直接上代碼。注釋寫的都很詳細!!!

package com.thread.multi2;

public class Bank {
    // 假設一個賬戶有1000塊錢
    static int money = 1000;

    // 櫃台取錢的方法
    public synchronized void getCounter(int money1) {
        Bank.money -= money1;// 取錢后總數減少
        System.out.println("A取走了" + money1 + "還剩下" + Bank.money);
    }

    // ATM取錢的方法
    public synchronized void getATM(int money2) {// 參數是每次取走的錢
        Bank.money -= money2;// 取錢后總數減少
        System.out.println("B取走了" + money2 + "還剩下" + Bank.money);
    }

}
package com.thread.multi2;

public class PersonA extends Thread {
    // 創建銀行對象
    Bank bank;

    // 通過構造器傳入銀行對象,確保兩個人進入的是一個銀行
    public PersonA(Bank bank) {
        this.bank = bank;
    }

    // 重寫run方法,在里面使用櫃台取錢

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

        }

    }

}
package com.thread.multi2;

public class PersonB extends Thread {
    // 創建銀行對象
    Bank bank;

    // 通過構造器傳入銀行對象,確保兩個人進入的是一個銀行
    public PersonB(Bank bank) {
        this.bank = bank;
    }

    // 重寫run方法,在里面使用使用ATM取錢

    @Override
    public void run() {
        while (Bank.money >= 200) {
            bank.getATM(200);// 每次取錢200塊
            try {
                sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

        }
    }

}
package com.thread.multi2;

public class MainClass {
    public static void main(String[] args) {
        Bank bank = new Bank();
        PersonA pA = new PersonA(bank);
        PersonB pB = new PersonB(bank);
        // 兩個人開始取錢
        pA.start();
        pB.start();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM