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();
            }
        }
    }
}

运行效果:

具体代码可以在github上下载:https://github.com/whitedouble/whitedouble.git

ps:此案例来源于外聘老师的课堂案例讲解。

新手第一次写博客,有许多不足之处,请各位大佬指出,多多指教。

兰州商学院陇桥学院 工学系课程设计报告 设 计 题 目:银行存取款管理系统 系 别:工学系 专 业 (方 向):信息管理与信息系统 年 级、 班: 2011级信息管理与信息系统班 2013 年7 月 5 日 目录 一、系统开发的背景 3 二、系统分析与设计 4 (一)系统功能要求: 4 (二)系统模块结构设计 5 1、存款系统模块,该模块主要实现:用户的存款要求; 5 2、取款模块,该模块主要实现:用户的取款要求; 6 3、余额查询模块,该模块主要实现:用户完成各项存取款后的余额查询业务; 6 4、利率模块,该模块主要实现:用户完成各项业务后,对账户余额利率的查询; 6 5、转账模块,该模块主要实现:用户对其存款的转账业务; 6 6、退出模块,业务完成,退出系统。 6 三、系统的设计与实现 6 (一)登录界面 6 (二)主菜单界面 9 (三)各模块的具体实现 12 四、系统测试 15 (一)登录界面: 15 (二)主菜单界面: 16 (三)各操作界面: 17 五、总结 18 六、附件(代码、部分图表) 19 银行存取款管理系统 一、系统开发的背景 随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银 行客户的需要。 现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己 越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各 种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方 便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务: 同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争, 如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术 加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆 在各家银行面前的一个迫切需要解诀的问题。 随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行 的电子化水平和相应的管理水平提出了更高的要求。如何利用电子化的手段构建一个高 效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。 支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大, 响应时间长。 特别是银行每天要处理大量的存取款事件,做好存取款银行工作重要的环节,然 而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快 速、有效、准确、安全的处理银行事物。 二、系统分析与设计 (一)系统功能要求: 根据系统的需求分析,本系统的功能要求: 1.用户登录界面:包括账户和密码,使有银行账号的用户进入系统管理自己的财务。 2.存款记录:记录每个时间点的存款金额和银行余额,使用户金额一目了然。 3.存款流水账:记录每天,每个用户存款金额,最后进行汇总。 4.利息结算:按照用户的存款金额和存款时间,进行月利率或者年利率计算制。 5.取款记录:记录每个时间点的取款金额和银行余额。 (二)系统模块结构设计 通过对系统功能的分析,银行存取款管理系统功能。 图1银行存取款管理系统功能图 通过上图的功能分析,把整个系统划分为6个模块: 主要导航栏有:欢迎使用储蓄卡管理(存款、取款、查询余额、利率、注销退出) 1、存款系统模块,该模块主要实现:用户的存款要求; 2、取款模块,该模块主要实现:用户的取款要求; 3、余额查询模块,该模块主要实现:用户完成各项存取款后的余额查询业务; 4、利率模块,该模块主要实现:用户完成各项业务后,对账户余额利率的查询; 5、转账模块,该模块主要实现:用户对其存款的转账业务; 6、退出模块,业务完成,退出系统。 三、系统的设计与实现 (一)登录界面 分析:首先输出界面,其中有用户名和密码,然后进入主页面,该模块的具体代码 。 l1=new Label("欢迎来到银行管理系统",Label.CENTER); Font f=new Font("宋体",Font.BOLD,30); l1.setFont(f); l2=new Label("请输入管理员帐号",Label.CENTER); l3=new Label("请输入管理员密码",Label.CENTER); setBackground(Color.pink); btn=new Button("确定"); t1=new TextField(20); t2=new TextField(15); //t2.setEchoChar( * ); l1.setForeground(Color.red); t1.setBackground(Color.cyan); t2.setBackground(Color.cyan); t
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值