java面试题之银行业务调度系统

本文介绍了一种基于线程的银行业务调度系统设计方案,通过NumberMachine管理不同类型的号码(普通、快速、VIP),WindowService类根据窗口类型进行叫号服务。系统采用多线程和同步机制确保号码的正确生成与分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

银行业务调度系统

总结:线程通过NumberMachine的NumberManager对象定时产生对应类型的客户,WindowService类根据窗口的类型通过NumberMachine的NumberManager对象获取号码并进行服务.两者通过产生号码和获取号码联系的.

 

实现步骤

1,创建一个NumberManager类.用于号码的管理

    定义一个号码计数器(int)和一个集合(用于存储号码)

    定义一个generateNumber()方法,用于产生号码(即增加计数器的值),并将号码存放在集合中.

    定义一个fetchNumber()方法,用于获取号码,从集合中第一个号码并移除(集合的remove()方法),并返回该号码.

注:这两个方法要加同步锁,防止产生号码的方法还没执行完,就取号.(没取着)

 

2,创建一个NumberMachine类,用于产生号码,因为只有一个对象设计成单例的

    定义3个NumberManager对象,分别对应着普通,快速,Vip的取号管理.

    将该类设计成单例模式.

 

3,创建一个CustomerType枚举,用于定义三种的客户

    定义三个元素,分别是Common,Express,Vip,并重写toString().

 

4,创建一个WindowService,用于管理窗口叫号和服务.

    定义一个窗口类型对象(Common),和窗口的编号(windoweId);并进行初始化.

    在构造函数中启动一个线程并一直运行(while(true)),run()方法中while中的代码是:获取当前窗口的类型:

若是Common,则通过NumberMachine对象的getCommo()方法返回NumberManager对象,获取该对象中的号码(fetchNumbe).并判断是否为空, 若不为空,则进行服务(服务时间用Thread.sleep()实现).服务时间随机,是的话,休息一秒.

若是Express,则通过NumberMachine对象的getExpress()方法返回NumberManager对象,获取该对象中的号码(fetchNumbe).并判断是否为空,若不为空,则进行服务(服务时间用Thread.sleep()实现).服务时间是1秒,若不为空则调用commonService()方法,为普通客户服务.

若是Vip,则通过NumberMachine对象的getVip()方法返回NumberManager对象,获取该对象中的号码(fetchNumbe).并判断是否为空,若不为空,则进行服务(服务时间用Thread.sleep()实现).服务时间是随机,若不为空则调用commonService()方法,为普通客户服务.

注:

Common和Vip的服务时间,是在最大值和最小值之间随机产生的.最大值和最小值可定义成一个类的静态常量,再进行获取.

 

5,创建测试类BankTest

     创建4个类型为Common的WindowService对象,windoweId递增.可通过循环进行创建.

     创建1个类型为Express的WindowService对象,windoweId不变.

创建1个类型为Vip的WindowService对象,windoweId不变.

创建三个定时器,定时为不同类型的用户添加客户.(通过NumberMachine.getInstance.getXxx().generateNumber();模拟用户的添加)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值