项目分析:
银行窗口 三类窗口
客户 三类客户
客户随机生成
生成比例 1:6:3

窗口可以向下兼容,
各类型客户应在其对应窗口顺序依次办理业务, 需要有窗口叫号控制器

实际代码设计:

首先先编号码管理器NumberManager

变量类型尽量面向父级,体现面向接口编程

ArrayList remove返回类型是他取走的数据类型

为了达到多线程操作的时候应让其互斥,加synchronized

1、号码生成器

/** 号码生成器*/
public class NumberManager {// 定义号码变量private int lastNumber = 1;// 定义号码集合private List<Integer> queueNumber = new ArrayList<Integer>();// 生成新号码public synchronized Integer generateNewManager() {queueNumber.add(lastNumber);return lastNumber++;}// 取出第一个号码public synchronized Integer fetchServiceNumber() {Integer number = null;if (queueNumber.size() > 0) {number = queueNumber.remove(0);}return number;}
}

号码管理器:

/*** 号码管理器*///定义用户级别private NumberManager commonManager = new NumberManager();private NumberManager expressManager = new NumberManager();private NumberManager vipManager = new NumberManager();public NumberManager getCommonManager() {return commonManager;}public NumberManager getExpressManager() {return expressManager;}public NumberManager getVipManager() {return vipManager;}// 将对象变成单例private NumberMachine() {}public static NumberMachine getInstance() {return instance;}private static NumberMachine instance = new NumberMachine();
}

服务窗口

使用JDK1.5新的线程方式不仅可以使性能更好、而且还可以体现出自己懂得多

if else 为什么比switch 效率高

比如if(a==2)else if(a==3) 这样a需要请求多次值、系统不知道这两个a是同一个a
这样switch就体现出它只用一次值就可以达到if else的效果 所以switch效率高

 /*** 服务窗口* **///定义常量类的默认值和窗口序号private CustomerType type = CustomerType.COMMON;private int windowId = 1;public void setType(CustomerType type) {this.type = type;}public void setWindowId(int windowId) {this.windowId = windowId;}public void start() {Executors.newSingleThreadExecutor().execute(new Runnable() {@Overridepublic void run() {while (true) {switch (type) {case COMMON:commonService();break;case EXPERSS:expressService();break;case VIP:vipService();break;}}}});}//普通窗口业务逻辑private void commonService() {String windowName = "第" + windowId + "号" + type + "窗口";//获取号码Integer number = NumberMachine.getInstance().getCommonManager().fetchServiceNumber();System.out.println(windowName + "正在获取任务");if (number != null) {System.out.println(windowName + "为第" + number + "个" + "普通" + "客户服务");long beginTime = System.currentTimeMillis();//生成随机等待时间int maxRand = Constants.MAX_SERVICE_TIME- Constants.MIN_SERVICE_TIME;long serveTime = new Random().nextInt(maxRand) + 1+ Constants.MIN_SERVICE_TIME;try {Thread.sleep(serveTime);} catch (InterruptedException e) {e.printStackTrace();}long costTime = System.currentTimeMillis() - beginTime;System.out.println(windowName + "为第" + number + "个" + "普通"+ "完成服务,耗时" + costTime / 1000 + "秒");} else {System.out.println(windowName + "没有获取到任务,休息一秒");try {Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}private void expressService() {String windowName = "第" + windowId + "号" + type + "窗口";Integer number = NumberMachine.getInstance().getExpressManager().fetchServiceNumber();System.out.println(windowName + "正在获取任务");if (number != null) {System.out.println(windowName + "为第" + number + "个" + type + "客户服务");long beginTime = System.currentTimeMillis();try {Thread.sleep(Constants.MIN_SERVICE_TIME);} catch (InterruptedException e) {e.printStackTrace();}long costTime = System.currentTimeMillis() - beginTime;System.out.println(windowName + "为第" + number + "个" + type+ "完成服务,耗时" + costTime / 1000 + "秒");} else {System.out.println(windowName + "没有获取到任务");commonService();}}private void vipService() {String windowName = "第" + windowId + "号" + type + "窗口";System.out.println(windowName + "正在获取任务");Integer number = NumberMachine.getInstance().getVipManager().fetchServiceNumber();System.out.println(windowName + "正在获取任务");if (number != null) {System.out.println(windowName + "为第" + number + "个" + type + "客户服务");long beginTime = System.currentTimeMillis();try {Thread.sleep(Constants.MIN_SERVICE_TIME);} catch (InterruptedException e) {e.printStackTrace();}long costTime = System.currentTimeMillis() - beginTime;System.out.println(windowName + "为第" + number + "个" + type+ "完成服务,耗时" + costTime / 1000 + "秒");} else {System.out.println(windowName + "没有获取到任务");commonService();}}}

运行测试拉~~

Main

public class MainClass {/*** @param args*/public static void main(String[] args) {// 生成五个普通窗口for (int i = 1; i < 5; i++) {ServiceWindow commonWindow = new ServiceWindow();commonWindow.setWindowId(i);commonWindow.start();}// 生成一个快速窗口ServiceWindow expressWindow = new ServiceWindow();expressWindow.setType(CustomerType.EXPERSS);expressWindow.start();// 生成一个VIP窗口ServiceWindow vipWindow = new ServiceWindow();vipWindow.setType(CustomerType.VIP);vipWindow.start();// 新技术使每隔N长时间产生普通用户Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager();System.out.println("第" + number + "号普通客户等待服务");}}, 0, Constants.COMMON_CUSTOMER_TIME, TimeUnit.SECONDS);// 新技术使每隔N长时间产生快速用户Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {Integer number = NumberMachine.getInstance().getExpressManager().generateNewManager();System.out.println("第" + number + "号快速客户等待服务");}}, 0, Constants.COMMON_CUSTOMER_TIME * 6, TimeUnit.SECONDS);// 新技术使每隔N长时间产生VIP用户Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {Integer number = NumberMachine.getInstance().getVipManager().generateNewManager();System.out.println("第" + number + "号vip客户等待服务");}}, 0, Constants.COMMON_CUSTOMER_TIME * 2, TimeUnit.SECONDS);}}

测试结果:

第1号VIP窗口正在获取任务
第1号快速窗口正在获取任务
第4号普通窗口正在获取任务
第1号快速窗口没有获取到任务
第2号普通窗口正在获取任务
第1号普通窗口正在获取任务
第3号普通窗口正在获取任务
第1号VIP窗口正在获取任务
第3号普通窗口没有获取到任务,休息一秒
第1号普通窗口没有获取到任务,休息一秒
第2号普通窗口没有获取到任务,休息一秒
第1号快速窗口正在获取任务
第4号普通窗口没有获取到任务,休息一秒
第1号快速窗口没有获取到任务,休息一秒
第1号VIP窗口没有获取到任务
第1号VIP窗口正在获取任务
第1号VIP窗口没有获取到任务,休息一秒
第1号普通客户等待服务
第1号快速客户等待服务
第1号vip客户等待服务
第4号普通窗口正在获取任务
第1号快速窗口正在获取任务
第1号VIP窗口正在获取任务
第1号普通窗口正在获取任务
第3号普通窗口正在获取任务
第2号普通窗口正在获取任务
第3号普通窗口没有获取到任务,休息一秒
第1号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第1号快速窗口为第1个快速客户服务
第4号普通窗口为第1个普通客户服务
第1号VIP窗口为第1个VIP客户服务
第2号普通窗口没有获取到任务,休息一秒
第2号普通客户等待服务
第3号普通窗口正在获取任务
第1号快速窗口为第1个快速完成服务,耗时1秒
第1号快速窗口正在获取任务
第1号普通窗口正在获取任务
第1号快速窗口没有获取到任务
第1号快速窗口正在获取任务
第3号普通窗口为第2个普通客户服务
第3号普通客户等待服务
第1号快速窗口没有获取到任务,休息一秒
第2号普通窗口正在获取任务
第1号VIP窗口为第1个VIP完成服务,耗时1秒
第1号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第2号vip客户等待服务
第2号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第1号VIP窗口为第2个VIP客户服务
第1号快速窗口正在获取任务
第4号普通客户等待服务
第1号快速窗口没有获取到任务
第1号快速窗口正在获取任务
第1号快速窗口为第3个普通客户服务
第1号普通窗口正在获取任务
第1号普通窗口为第4个普通客户服务
第2号普通窗口正在获取任务
第1号VIP窗口为第2个VIP完成服务,耗时1秒
第2号普通窗口没有获取到任务,休息一秒
第1号VIP窗口正在获取任务
第1号VIP窗口正在获取任务
第1号VIP窗口没有获取到任务
第1号VIP窗口正在获取任务
第1号VIP窗口没有获取到任务,休息一秒
第5号普通客户等待服务
第3号vip客户等待服务
第1号VIP窗口正在获取任务
第2号普通窗口正在获取任务
第1号VIP窗口正在获取任务
第2号普通窗口为第5个普通客户服务
第1号VIP窗口为第3个VIP客户服务
第3号普通窗口为第2个普通完成服务,耗时2秒
第3号普通窗口正在获取任务
第3号普通窗口没有获取到任务,休息一秒
第6号普通客户等待服务
第1号VIP窗口为第3个VIP完成服务,耗时1秒

银行业务调度系统学习相关推荐

  1. 又一道软通动力7K月薪面试题——银行业务调度系统

    后期补充:网友对我诟病最多的就是我帮学生做面试题,说这是小偷和骗子行为,在此,我对自己给学员做面试题做出如下解释:  (1)学员拿着面试题来找老师,学生也事先思考和尝试后实在没有办法,又求职心切才想到 ...

  2. 黑马程序员Java培训、Android培训_银行业务调度系统笔记

    银行业务调度系统 一.学习心得: 第一点,和交通灯系统一样,银行业务调度系统也必须用面相对象的思想来设计,不然会很繁琐.所以,必须在平时的学习中重视面向对象设计的练习和掌握. 第二点,要设计这个银行业 ...

  3. 黑马程序员_银行调度系统学习总结

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 银行业务调度系统: 模拟实现银行业务调度系统逻辑,具体需求如下: ·银行内有 ...

  4. 黑马程序员----银行业务调度系统面试题

    这种程序就是模拟一个去取票系统,大家平时都有移动营业厅或者银行,都知道进去之后需要在门口的取票取一张票,那张票上面记录你的号码和需要等待的人楼,然后窗口会有显示当前服务的号码,如果轮到相应的数字就到对 ...

  5. 黑马程序员_java基础笔记(15)...银行业务调度系统_编码思路及代码

    ---------- ASP.Net+Android+IOS开发..Net培训.期待与您交流!---------- 1,面试题目:银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内 ...

  6. 黑马程序员__银行业务调度系统

    ------- <a href="http://www.itheima.com" target="blank">android培训</a> ...

  7. 黑马程序员 银行业务调度系统

    ------- android培训.java培训.期待与您交流! ---------- 银行业务调度系统 模拟实现银行业务调度系统逻辑,具体需求如下:          银行内有6个业务窗口,1- 4 ...

  8. 银行系统java实施面试_Java7K面试题—银行业务调度系统

    先前也没搞清银行业务调度系统是怎么回事,也是看了张孝祥老师的视频并照着写出的代码,执行时发现结果并不是自己想象的那样.自己的预想为:倘若某普通窗口先于另一个普通窗口服务完客户,那么该窗口必然先于另一个 ...

  9. Java面向对象编程面试题:银行业务调度系统

    模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIp窗口. 有三种对应类型的客户:VIp客户,普通客户,快速客户(办理如 ...

最新文章

  1. 局部响应归一化(Local Response Normalization)
  2. Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器
  3. 深度学习之图像处理---七级浮屠
  4. Oracle adviser,Oracle10g SQL tune adviser
  5. linux mount命令衔接,Linux mount命令详解:挂载Linux系统外的文件
  6. 【BZOJ2809】【codevs1763】派遣,主席树记录前缀和
  7. python产生随机数列表_python如何产生10个不同的随机数
  8. TD数量不确定时如何让其宽度平均分布
  9. 6. 成交量基础分析
  10. Java中Comparable接口与Comparator接口
  11. 电子商务网站建设策划书_网站建设及推广的5大注意事项
  12. java swt 刷新,java – org.eclipse.swt.SWTException:从表刷新中“处理小部件”
  13. 基础接口 java_java基础中的 接口方法的问题
  14. 好用的PDF解密工具哪个好?
  15. 淘宝客赚钱方式及怎么入门和推广引流详解
  16. Event representations with tensor-based compositions笔记
  17. 大华技术股份有限公司测开笔试题分享
  18. 【团队介绍】小逗比们的介绍篇
  19. 织梦标签全攻略[转]
  20. TIA博途中如何通过PLC变量控制开始和停止记录数据?

热门文章

  1. spring mvc tutorial
  2. sql server 与 oracle 的不同,第一感觉。
  3. zabbix错误提示解决
  4. MySQL Replication主主复制—(实例)
  5. 总说别人掉队的虎嗅 没想到自己先掉队了
  6. Linux发展历史图
  7. ActiveMQ 使用文档
  8. IOS6初始化后设置UIScrollview的位置
  9. 为 iOS 6 量身打造 Apps
  10. 64位Office 2010 连接SOHU IMAP服务器遇到问题