------- android培训、java培训、期待与您交流! ----------
我在原有代码的基础上进行了一下改进,增加了Controller类
public class Controller { private static final int CUSTOMER_FETCH = 1; private ScheduledExecutorService sch = Executors.newScheduledThreadPool(3); public Controller() { ServiceWindow.普通1.service(); ServiceWindow.普通2.service(); ServiceWindow.普通3.service(); ServiceWindow.普通4.service(); ServiceWindow.快速.service(); ServiceWindow.VIP.service(); } public void schedule() { // 普通客户 sch.scheduleAtFixedRate(new Runnable() { @Override public void run() { synchronized(this){ Integer serviceNumber = NumberGenerator.common.generalNewNumber(); System.out.println("第" + serviceNumber + "号普通客户正在等待服务!"); } } }, 0, CUSTOMER_FETCH, TimeUnit.SECONDS); // 快速客户 sch.scheduleAtFixedRate(new Runnable() { @Override public void run() { synchronized(this){ Integer serviceNumber = NumberGenerator.express.generalNewNumber(); System.out.println("第" + serviceNumber + "号快速客户正在等待服务!"); } } }, 0, CUSTOMER_FETCH * 2, TimeUnit.SECONDS); // vip客户 sch.scheduleAtFixedRate(new Runnable() { @Override public void run() { synchronized(this){ Integer serviceNumber = NumberGenerator.vip.generalNewNumber(); System.out.println("第" + serviceNumber + "号VIP客户正在等待服务!"); } } }, 0, CUSTOMER_FETCH * 6, TimeUnit.SECONDS); } }
调用方法
public class Run { public static void main(String[] args) { new Controller().schedule(); } }
ServiceWindow类采用枚举进行重写
public enum ServiceWindow { 普通1("普通", 1), 普通2("普通", 2), 普通3("普通", 3), 普通4("普通", 4), 快速( "快速", 5), VIP("VIP", 6); private static final int MAX = 10; private static final int MIN = 1; private String type; private int id; String windowName = this.name(); private ExecutorService pool; public int getId() { return id; } private ServiceWindow(String type, int id) { this.type = type; this.id = id; pool = Executors.newSingleThreadExecutor(); } public void service() { pool.execute(new Runnable() { @Override public void run() { while (true) { switch (type) { case "普通": commonService(); break; case "快速": expressService(); break; case "VIP": vipService(); break; } } } }); } private synchronized void vipService() { Integer customerNum = NumberGenerator.vip.fetchNumber(); if (customerNum != 0) { System.out.println(id + "号" + type + "窗口开始为" + customerNum + "号vip客户服务"); int serviceTime = new Random().nextInt(MAX - MIN) + 1 + MIN; try { Thread.sleep(serviceTime * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(id + "号" + type + "窗口完成为第" + customerNum + "号vip客户服务,总共耗时" + serviceTime + "秒"); } else { System.out.println(windowName + "没有取到vip任务"); commonService(); } } private synchronized void expressService() { Integer customerNum = NumberGenerator.express.fetchNumber(); if (customerNum != 0) { System.out.println(id + "号" + type + "窗口开始为" + customerNum + "号快速客户服务"); int serviceTime = MIN; try { Thread.sleep(serviceTime * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(id + "号" + type + "窗口完成为第" + customerNum + "号快速客户服务,总共耗时" + serviceTime + "秒"); } else { System.out.println(windowName + "没有取到快速任务"); commonService(); } } private synchronized void commonService() { int customerNum = NumberGenerator.common.fetchNumber(); if (customerNum != 0) { System.out.println(id + "号" + type + "窗口开始为" + customerNum + "号普通客户服务"); int serviceTime = new Random().nextInt(MAX - MIN) + 1 + MIN; try { Thread.sleep(serviceTime * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(id + "号" + type + "窗口完成为第" + customerNum + "号普通客户服务,总共耗时" + serviceTime + "秒"); } else { System.out.println(windowName + "没有取到普通任务,正在空闲一秒"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }
排号生成器也用枚举重写
public enum NumberGenerator { common,express,vip; private int num = 0; private LinkedList<Integer> list = new LinkedList<>(); public int generalNewNumber() { synchronized(this){ list.addLast(++num); } return num; } public int fetchNumber() { if (list.size() > 0) synchronized(list){ return list.removeFirst(); } else return 0; } }
执行结果
普通1没有取到普通任务,正在空闲一秒 普通3没有取到普通任务,正在空闲一秒 快速没有取到快速任务 快速没有取到普通任务,正在空闲一秒 第1号普通客户正在等待服务! 2号普通窗口开始为1号普通客户服务 VIP没有取到vip任务 VIP没有取到普通任务,正在空闲一秒 普通4没有取到普通任务,正在空闲一秒 第1号快速客户正在等待服务! 第1号VIP客户正在等待服务! 第2号普通客户正在等待服务! 1号普通窗口开始为2号普通客户服务 5号快速窗口开始为1号快速客户服务 普通3没有取到普通任务,正在空闲一秒 普通4没有取到普通任务,正在空闲一秒 6号VIP窗口开始为1号vip客户服务 第3号普通客户正在等待服务! 5号快速窗口完成为第1号快速客户服务,总共耗时1秒 快速没有取到快速任务 3号普通窗口开始为3号普通客户服务 快速没有取到普通任务,正在空闲一秒 普通4没有取到普通任务,正在空闲一秒 第2号快速客户正在等待服务! 第4号普通客户正在等待服务! 5号快速窗口开始为2号快速客户服务 4号普通窗口开始为4号普通客户服务 第5号普通客户正在等待服务! 3号普通窗口完成为第3号普通客户服务,总共耗时2秒 3号普通窗口开始为5号普通客户服务 5号快速窗口完成为第2号快速客户服务,总共耗时1秒 快速没有取到快速任务 快速没有取到普通任务,正在空闲一秒 第3号快速客户正在等待服务! 第6号普通客户正在等待服务! 1号普通窗口完成为第2号普通客户服务,总共耗时4秒 2号普通窗口完成为第1号普通客户服务,总共耗时5秒 1号普通窗口开始为6号普通客户服务 普通2没有取到普通任务,正在空闲一秒 5号快速窗口开始为3号快速客户服务 6号VIP窗口完成为第1号vip客户服务,总共耗时4秒 VIP没有取到vip任务 VIP没有取到普通任务,正在空闲一秒 第7号普通客户正在等待服务! 2号普通窗口开始为7号普通客户服务 5号快速窗口完成为第3号快速客户服务,总共耗时1秒 快速没有取到快速任务 快速没有取到普通任务,正在空闲一秒 VIP没有取到vip任务 VIP没有取到普通任务,正在空闲一秒 第4号快速客户正在等待服务! 第2号VIP客户正在等待服务! 第8号普通客户正在等待服务! 3号普通窗口完成为第5号普通客户服务,总共耗时3秒 3号普通窗口开始为8号普通客户服务 5号快速窗口开始为4号快速客户服务 6号VIP窗口开始为2号vip客户服务 第9号普通客户正在等待服务! 1号普通窗口完成为第6号普通客户服务,总共耗时3秒 1号普通窗口开始为9号普通客户服务 5号快速窗口完成为第4号快速客户服务,总共耗时1秒 快速没有取到快速任务 快速没有取到普通任务,正在空闲一秒 第5号快速客户正在等待服务! 第10号普通客户正在等待服务! 5号快速窗口开始为5号快速客户服务 6号VIP窗口完成为第2号vip客户服务,总共耗时2秒 VIP没有取到vip任务 6号VIP窗口开始为10号普通客户服务 第11号普通客户正在等待服务! 4号普通窗口完成为第4号普通客户服务,总共耗时7秒 5号快速窗口完成为第5号快速客户服务,总共耗时1秒 快速没有取到快速任务 5号快速窗口开始为11号普通客户服务 普通4没有取到普通任务,正在空闲一秒 第6号快速客户正在等待服务! 第12号普通客户正在等待服务! 4号普通窗口开始为12号普通客户服务 第13号普通客户正在等待服务! 第7号快速客户正在等待服务! 第3号VIP客户正在等待服务!
相关推荐
02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-...
银行业务调度系统分析,这个是张孝祥老师的源码,我看了之后觉得不错。特别是对多线程的讲解。
张孝祥银行业务调度系统由赤霄扬天上传。看好程序,看优秀代码,写出自己的优秀代码。
张孝祥银行业务调度系统源代码 看完视频就开始写 写出来的
用Java编写银行业务调度系统,附主类: package com.isoftstons.interview.bank; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class Mainlass { public Mainlass() {...
张孝祥银行业务调度系统源代码 第二次写 复习 隔了两天又写的 复习看记得怎么样 又过了几天对这个做了改进 服务方法只用一个,传递窗口类型就可以了,很方便,收获不少 下次传上来
软通动力面试题——银行业务调度系统(张老师),编码仅供参考。
模拟实现银行业务调度系统逻辑,具体需求如下: 1.银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 2.有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、...
黑马程序员银行调度系统样例代码,共有3个主要类,2个辅助类,一个运行实例类,分别为: 1.3个主要类 NumberMachine,取号码器 NumberManager,号码管理器 ServiceWindow,业务窗口 2个辅助类 Constants,常量池 ...
张孝祥银行业务调度系统笔记 面试题笔记
银行业务调度系统模拟,是自己看视频一边学习一边编写的,经过分析,没有问题。
本视频讲解的内容为《银行业务调度系统》,这道做出来就给7k月薪的面试题。
银行业务调度系统图形版,包含Gui编程,面向对象的方法。
此资源包含内容: 1,银行业务调度系统需求; 2,银行业务调度系统面试题; 3,银行业务调度系统实现代码;
NULL 博文链接:https://yhjhoo.iteye.com/blog/1148998
NULL 博文链接:https://xurichusheng.iteye.com/blog/1560058