最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2013年08月19日 15:53:17   作者:  
線程 Thread 類,和 Runable 接口 比較兩者的特點和應用領(lǐng)域.可以,直接繼承線程Thread類。該方法編寫簡單,可以直接操作線程,適用于單重繼承情況,因而不能在繼承其他類,下面我們來看一個實例

實現(xiàn)Runnable接口。當一個線程已繼承了另一個類時,就只能用實現(xiàn)Runnable接口的方法來創(chuàng)建線程,且便于保持程序風格的一致性。

我們知道,一個具有生命的線程,具有下面五種狀態(tài):

創(chuàng)建狀態(tài)

使用new運算符創(chuàng)建一個線程后,該線程僅僅是一個空對象,系統(tǒng)沒有分配資源,稱該線程處于創(chuàng)建狀態(tài)(new thread)

可運行狀態(tài)

使用start()方法啟動一個線程后,系統(tǒng)為該線程分配了除CPU外的所需資源,使該線程處于可運行狀態(tài)(Runnable)

運行中狀態(tài)

Java運行系統(tǒng)通過調(diào)度選中一個Runnable的線程,使其占有CPU并轉(zhuǎn)為運行中狀態(tài)(Running)。此時,系統(tǒng)真正執(zhí)行線程的run()方法。

阻塞狀態(tài)

一個正在運行的線程因某種原因不能繼續(xù)運行時,進入阻塞狀態(tài)(Blocked)

死亡狀態(tài)

線程結(jié)束后是死亡狀態(tài)(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);   //取款發(fā)費的時間; 
            } 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);  //查詢的時候,發(fā)費得時間; 
            } 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(); 
    } 
}

程序運行結(jié)果如下:

尊敬的ZhouHaiTao用戶您好!當前的余額為:0元.存入余額為:100元.賬戶余額為:100元
尊敬的ZhouHaiTao用戶您好!當前的余額為:0元.存入余額為:200元.賬戶余額為:300元
尊敬的ZhouHaiTao用戶您好!當前的余額為:0元.取出余額為:300元.賬戶余額為:0元

相關(guān)文章

最新評論

乌拉特中旗| 东乡族自治县| 平邑县| 兴业县| 奉新县| 礼泉县| 屏山县| 湖北省| 乡宁县| 平舆县| 苍山县| 泸溪县| 新河县| 中西区| 增城市| 项城市| 酒泉市| 建水县| 柞水县| 界首市| 永城市| 天峻县| 东乡族自治县| 合阳县| 丁青县| 海兴县| 永修县| 台江县| 镇康县| 道真| 天水市| 松原市| 塔城市| 镇原县| 芜湖县| 闽侯县| 阿克| 田东县| 沙田区| 将乐县| 西城区|