java 使用线程做的一个简单的ATM存取款实例代码

骑着蜗牛往前奔

骑着蜗牛往前奔

2016-02-19 08:55

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐java 使用线程做的一个简单的ATM存取款实例代码,无聊中的都看过来。

实现Runnable接口。当一个线程已继承了另一个类时,就只能用实现Runnable接口的方法来创建线程,且便于保持程序风格的一致性。

我们知道,一个具有生命的线程,具有下面五种状态:

创建状态

使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)

可运行状态

使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)

运行中状态

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

Java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running)。此时,系统真正执行线程的run()方法。

阻塞状态

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(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元

展开更多 50%)
分享

猜你喜欢

java 使用线程做的一个简单的ATM存取款实例代码

编程语言 网络编程
java 使用线程做的一个简单的ATM存取款实例代码

Java代码构建一个线程池

Java JAVA基础
Java代码构建一个线程池

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

java循环练习的简单代码实例

编程语言 网络编程
java循环练习的简单代码实例

一个多线程后台扫描的程序和源代码

编程语言 网络编程
一个多线程后台扫描的程序和源代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

一个用java作的日历的源代码

编程语言 网络编程
一个用java作的日历的源代码

ATM取款机已被允许使用Windows 8.1系统

电脑入门
ATM取款机已被允许使用Windows 8.1系统

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Objective-C中使用NSString类操作字符串的方法小结

Objective-C中使用NSString类操作字符串的方法小结

2007/12/23更新创意无限,简单实用(javascript log)

2007/12/23更新创意无限,简单实用(javascript log)
下拉加载更多内容 ↓