程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 應用線程做的一個簡略的ATM存取款實例代碼

java 應用線程做的一個簡略的ATM存取款實例代碼

編輯:關於JAVA

java 應用線程做的一個簡略的ATM存取款實例代碼。本站提示廣大學習愛好者:(java 應用線程做的一個簡略的ATM存取款實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是java 應用線程做的一個簡略的ATM存取款實例代碼正文


完成Runnable接口。當一個線程已繼續了另外一個類時,就只能用完成Runnable接口的辦法來創立線程,且便於堅持法式作風的分歧性。

我們曉得,一個具有性命的線程,具有上面五種狀況:

創立狀況

應用new運算符創立一個線程後,該線程僅僅是一個空對象,體系沒有分派資本,稱該線程處於創立狀況(new thread)

可運轉狀況

應用start()辦法啟動一個線程後,體系為該線程分派了除CPU外的所需資本,使該線程處於可運轉狀況(Runnable)

運轉中狀況

Java運轉體系經由過程調劑選中一個Runnable的線程,使其占領CPU並轉為運轉中狀況(Running)。此時,體系真正履行線程的run()辦法。

壅塞狀況

一個正在運轉的線程因某種緣由不克不及持續運轉時,進入壅塞狀況(Blocked)

逝世亡狀況

線程停止後是逝世亡狀況(Dead)

空話不多說,上面直接上代碼:

Java代碼:

package pack.java.thread.atm; 
    /**
     * 賬戶類;
     * @author Administrator
     *
     */ 
    public class Account { 

        private String name;  //用戶名; 
        private int value;    //賬戶余額; 

        /**
         * 存入金額;
         * @param monery
         */ 
        public void putMonery(int monery){ 
            this.value = this.value + monery;  
        } 

        /**
         * 掏出金額;
         * @param monery
         * @return 金額;
         */ 
        public int getMonery(int monery){ 

            //斷定能否賬戶余額能否年夜於 要掏出的錢; 
            if(this.value > monery ){ 
                this.value = this.value - monery;    
            }else{ 
                monery = this.value;  //賬戶余額不敷時,則掏出,一切的賬戶余額的金額.  
                this.value = 0; 
            } 
            //前往掏出的錢; 
            return monery; 
        } 

        /**
         * 查詢余額;
         * @return 前往賬戶余額;
         */ 
        public int search(){ 
            return this.value; 
        } 

        public String getName() { 
            return name; 
        } 
        public void setName(String name) { 
            this.name = name; 
        } 
        public int getValue() { 
            return value; 
        } 
        public void setValue(int value) { 
            this.value = value; 
        } 
    }

java代碼:


import java.io.Serializable; 
/**
 * 取款線程類;
 * @author Administrator
 *
 */ 
public class FetchMoney extends Thread implements Serializable{ 

    private static final long serialVersionUID = -5059599151558445815L; 

    private Account account;  //賬戶對象; 
    private int monery;       //余額; 

    public FetchMoney(){ 
        super(); 
    } 

    public FetchMoney(int monery,Account account){ 
        this.account = account; 
        this.monery = monery; 
    } 

    @Override 
    public void run() { 
        // TODO Auto-generated method stub 
        int currMonery  = account.search();  //以後余額; 
        synchronized (account) { 
            try { 
                sleep(5);   //取款發費的時光; 
            } catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
            //掏出余額; 
            int getMonery = account.getMonery(monery); 
            System.out.println("尊重的"+account.getName()+"用戶您好!"+"以後的余額為:"+currMonery +"元."+"掏出余額為:"+getMonery+"元."+"賬戶余額為:"+account.search()+"元"); 
        } 
    } 
}

java代碼:


/**
 * 存款線程類;
 * @author Administrator
 *
 */ 
public class SaveMoney extends Thread implements Serializable{ 

    private static final long serialVersionUID = 3095120546560212724L; 

    private Account account;  //賬戶對象; 
    private int money;        //金額; 

    public SaveMoney(){ 
        super(); 
    } 

    public SaveMoney(int money,Account account){ 
        this.account = account; 
        this.money = money; 
    } 

    @Override 
    public void run() { 
        // TODO Auto-generated method stub 
        int currMonery = account.search(); //查詢賬戶余額; 

        //同步對象,只許可單線程操作; 
        synchronized (account) { 
            try { 
                sleep(5);  //查詢的時刻,發費得時光; 
            } catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
            account.putMonery(this.money);   //拔出金額; 
            //輸入存款信息; 
            System.out.println("尊重的"+account.getName()+"用戶您好!"+"以後的余額為:"+currMonery +"元."+"存入余額為:"+this.money+"元."+"賬戶余額為:"+account.search()+"元"); 
        } 
    } 
}

java代碼:


/**
 * ATM測試類;
 * @author Administrator
 *
 */ 
public class ThreadATMDemo { 

    /**
     * 主辦法;
     * @param args
     */ 
    public static void main(String[] args) { 
        // TODO Auto-generated method stub 
        Account account = new Account(); 
        //設置用戶名; 
        account.setName("ZhouHaiTao"); 
        //初始化余額; 
        account.setValue(0); 

        //存入100; 
        new SaveMoney(100,account).start(); 

        //存入200; 
        new SaveMoney(200, account).start(); 

        //掏出500; 
        new FetchMoney(500, account).start(); 
    } 
}

法式運轉成果以下:

尊重的ZhouHaiTao用戶您好!以後的余額為:0元.存入余額為:100元.賬戶余額為:100元
尊重的ZhouHaiTao用戶您好!以後的余額為:0元.存入余額為:200元.賬戶余額為:300元
尊重的ZhouHaiTao用戶您好!以後的余額為:0元.掏出余額為:300元.賬戶余額為:0元

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved