欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java 使用線程做的一個(gè)簡(jiǎn)單的ATM存取款實(shí)例代碼

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

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

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

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

使用new運(yùn)算符創(chuàng)建一個(gè)線程后,該線程僅僅是一個(gè)空對(duì)象,系統(tǒng)沒(méi)有分配資源,稱(chēng)該線程處于創(chuàng)建狀態(tài)(new thread)

可運(yùn)行狀態(tài)

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

運(yùn)行中狀態(tài)

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

阻塞狀態(tài)

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

死亡狀態(tài)

線程結(jié)束后是死亡狀態(tài)(Dead)

廢話不多說(shuō),下面直接上代碼:

Java代碼:

復(fù)制代碼 代碼如下:

package pack.java.thread.atm; 
    /**
     * 賬戶(hù)類(lèi);
     * @author Administrator
     *
     */ 
    public class Account { 

        private String name;  //用戶(hù)名; 
        private int value;    //賬戶(hù)余額; 

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

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

            //判斷是否賬戶(hù)余額是否大于 要取出的錢(qián); 
            if(this.value > monery ){ 
                this.value = this.value - monery;    
            }else{ 
                monery = this.value;  //賬戶(hù)余額不夠時(shí),則取出,所有的賬戶(hù)余額的金額.  
                this.value = 0; 
            } 
            //返回取出的錢(qián); 
            return monery; 
        } 

        /**
         * 查詢(xún)余額;
         * @return 返回賬戶(hù)余額;
         */ 
        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代碼:

復(fù)制代碼 代碼如下:

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

    private static final long serialVersionUID = -5059599151558445815L; 

    private Account account;  //賬戶(hù)對(duì)象; 
    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();  //當(dāng)前余額; 
        synchronized (account) { 
            try { 
                sleep(5);   //取款發(fā)費(fèi)的時(shí)間; 
            } catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
            //取出余額; 
            int getMonery = account.getMonery(monery); 
            System.out.println("尊敬的"+account.getName()+"用戶(hù)您好!"+"當(dāng)前的余額為:"+currMonery +"元."+"取出余額為:"+getMonery+"元."+"賬戶(hù)余額為:"+account.search()+"元"); 
        } 
    } 
}

java代碼:

復(fù)制代碼 代碼如下:

/**
 * 存款線程類(lèi);
 * @author Administrator
 *
 */ 
public class SaveMoney extends Thread implements Serializable{ 

    private static final long serialVersionUID = 3095120546560212724L; 

    private Account account;  //賬戶(hù)對(duì)象; 
    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(); //查詢(xún)賬戶(hù)余額; 

        //同步對(duì)象,只允許單線程操作; 
        synchronized (account) { 
            try { 
                sleep(5);  //查詢(xún)的時(shí)候,發(fā)費(fèi)得時(shí)間; 
            } catch (InterruptedException e) { 
                // TODO Auto-generated catch block 
                e.printStackTrace(); 
            } 
            account.putMonery(this.money);   //插入金額; 
            //輸出存款信息; 
            System.out.println("尊敬的"+account.getName()+"用戶(hù)您好!"+"當(dāng)前的余額為:"+currMonery +"元."+"存入余額為:"+this.money+"元."+"賬戶(hù)余額為:"+account.search()+"元"); 
        } 
    } 
}

java代碼:

復(fù)制代碼 代碼如下:

/**
 * ATM測(cè)試類(lèi);
 * @author Administrator
 *
 */ 
public class ThreadATMDemo { 

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

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

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

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

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

尊敬的ZhouHaiTao用戶(hù)您好!當(dāng)前的余額為:0元.存入余額為:100元.賬戶(hù)余額為:100元
尊敬的ZhouHaiTao用戶(hù)您好!當(dāng)前的余額為:0元.存入余額為:200元.賬戶(hù)余額為:300元
尊敬的ZhouHaiTao用戶(hù)您好!當(dāng)前的余額為:0元.取出余額為:300元.賬戶(hù)余額為:0元

相關(guān)文章

  • Java synchronized與CAS使用方式詳解

    Java synchronized與CAS使用方式詳解

    提到Java的知識(shí)點(diǎn)一定會(huì)有多線程,JDK版本不斷的更迭很多新的概念和方法也都響應(yīng)提出,但是多線程和線程安全一直是一個(gè)重要的關(guān)注點(diǎn)。比如說(shuō)我們一入門(mén)就學(xué)習(xí)的synchronized怎么個(gè)實(shí)現(xiàn)和原理,還有總是被提到的CAS是啥,他和synchronized關(guān)系是啥?請(qǐng)往下看
    2023-01-01
  • SpringBoot定時(shí)調(diào)度之Timer與Quartz詳解

    SpringBoot定時(shí)調(diào)度之Timer與Quartz詳解

    Java?中常用的定時(shí)調(diào)度框架有以下幾種:Timer、ScheduledExecutorService、Spring?Task和Quartz,本文主要來(lái)和大家講講他們的具體使用,需要的可以參考一下
    2023-06-06
  • Java運(yùn)算符從見(jiàn)過(guò)到掌握上

    Java運(yùn)算符從見(jiàn)過(guò)到掌握上

    計(jì)算機(jī)的最基本用途之一就是執(zhí)行數(shù)學(xué)運(yùn)算,作為一門(mén)計(jì)算機(jī)語(yǔ)言,Java也提供了一套豐富的運(yùn)算符來(lái)操縱變量,本篇對(duì)大家的學(xué)習(xí)或工作具有一定的價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java?Io?File文件操作基礎(chǔ)教程

    Java?Io?File文件操作基礎(chǔ)教程

    這篇文章主要介紹了Java?Io?File文件操作,在這里需要注意File只能訪問(wèn)文件以及文件系統(tǒng)的元數(shù)據(jù)。如果你想讀寫(xiě)文件內(nèi)容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile,需要的朋友可以參考下
    2022-05-05
  • java括號(hào)匹配問(wèn)題介紹

    java括號(hào)匹配問(wèn)題介紹

    大家好,本篇文章主要講的是java括號(hào)匹配問(wèn)題介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • java編程幾行代碼實(shí)現(xiàn)買(mǎi)菜自由

    java編程幾行代碼實(shí)現(xiàn)買(mǎi)菜自由

    這篇文章主要為大家介紹了java編程幾行代碼實(shí)現(xiàn)買(mǎi)菜自由,需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • J2EE項(xiàng)目代碼編寫(xiě)規(guī)范分享

    J2EE項(xiàng)目代碼編寫(xiě)規(guī)范分享

    這篇文章主要介紹了J2EE項(xiàng)目代碼編寫(xiě)規(guī)范分享,需要的朋友可以參考下
    2014-10-10
  • 如何解決IDEA.properties文件中文亂碼問(wèn)題

    如何解決IDEA.properties文件中文亂碼問(wèn)題

    這篇文章主要介紹了如何解決IDEA.properties文件中文亂碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    一篇文章帶你了解一些Java反射的學(xué)習(xí)記錄

    java反射機(jī)制是一個(gè)很好用的東西,用它可以解決很多死的東西,因?yàn)榉瓷錂C(jī)制的靈活行很大,有了他,我們就不要花太多的時(shí)間來(lái)寫(xiě)操做數(shù)據(jù)庫(kù)的代碼了,這個(gè)可以很大的減少開(kāi)發(fā)時(shí)間,而且代碼的可讀性好
    2021-09-09
  • Java遍歷Map鍵、值和獲取Map大小的方法示例

    Java遍歷Map鍵、值和獲取Map大小的方法示例

    本篇文章主要介紹了Java遍歷Map鍵、值和獲取Map大小的方法示例,詳細(xì)的介紹了Java遍歷Map的兩種實(shí)現(xiàn)方法和大小,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01

最新評(píng)論