1. 程式人生 > >java多執行緒案例1之簡單銀行取款問題及其優化

java多執行緒案例1之簡單銀行取款問題及其優化

      之前學java的時候,學校老師由於課時問題,沒有教我們多執行緒,最近學校外聘的企業教師給我們做實訓要用到多執行緒,因此才初步瞭解多執行緒,以下這個案例只是介紹java程式碼優化,程式碼中有涉及多執行緒,但今天不對其講解,只簡單講解程式碼優化的問題,希望對初學者有幫助。

  大概案例:有PeasonA跟PeasonB在銀行(bank)以同一個賬號取錢,取錢方式可以為櫃檯取款和ATM機取款。銀行賬號總共有1000元,PeasonA每隔1秒取款100元,PeasonB每隔2秒取款150元,兩人同時取款。當銀行賬戶不足100或者150元時,取款結束。

1.優化前:

注意:在進行任何專案程式編碼時,先把基本框架寫出來。

(1)程式入口類:Main.java //程式入口類 public class Main {

    //程式入口函式     public static void main(String[] args){         Bank bank=new Bank();         PersonA a=new PersonA(bank);         a.start();         PersonB b=new PersonB(bank);         b.start();     } }

  (2)銀行類:Bank.java

//銀行類 public class Bank {

    public int money=10000;//錢     //櫃檯取錢函式     public void Counter(int num){         money-=num;         System.out.println("A取了:"+num+" 剩餘錢數:"+money);     }          //ATM取錢函式     public void Atm(int num){         money-=num;         System.out.println("B取了:"+num+" 剩餘錢數:"+money);     }     }

(3)personA類:PersonA.java //A public class PersonA extends Thread {

    private Bank bank;     //建構函式     public PersonA(Bank bank){         this.bank=bank;     }          @Override     public void run(){         while(bank.money>=100){             bank.Counter(100);             try {                 sleep(1000);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } } (4)PersonB類:PersonB.java

public class PersonB extends Thread{

    private Bank bank;     //建構函式     public PersonB(Bank bank){         this.bank=bank;     }     @Override     public void run(){         while(bank.money>=150){             bank.Atm(150);             try {                 sleep(2000);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } }  

2.優化後:

(1)程式入口類:

//程式入口類 public class Main {

    //程式入口函式     public static void main(String[] args){         Person a=new Person("Tom","A",100,1000);         a.start();                  Person b=new Person("Ru","B",150,2000);         b.start();                  Person c=new Person("小敏","A",250,2500);         c.start();     } }   (2)銀行類:Bank.java

//銀行類 public class Bank {

    public static int money=10000;//錢          //櫃檯取錢函式     public static void Counter(String name,int num){         money-=num;         System.out.println(name+"取了:"+num+" 剩餘錢數:"+money);     }          //ATM取錢函式     public static void Atm(String name,int num){         money-=num;         System.out.println(name+"取了:"+num+" 剩餘錢數:"+money);     }      } (3)Person類:person.java //角色類 public class Person extends Thread {

    private String name;     private String type;     private int num;     private int deltime;     public Person(String name,String type,int num,int deltime){         this.name=name;         this.type=type;         this.num=num;         this.deltime=deltime;     }          @Override     public void run(){                  while(Bank.money>=num){             if(type=="A"){                 Bank.Counter(name,num);             }else{                 Bank.Atm(name,num);             }                          try {                 sleep(deltime);             } catch (InterruptedException e) {                 e.printStackTrace();             }         }     } }

執行效果:

ps:此案例來源於外聘老師的課堂案例講解。

新手第一次寫部落格,有許多不足之處,請各位大佬指出,多多指教。