黑马程序员——银行业务调度系统代码

来源:互联网 发布:白酒生产流程知乎 编辑:程序博客网 时间:2024/06/18 00:19

----------------------    android培训    java培训   期待与您交流!    ----------------------

NumberManager类的编写

package cn.itcast.bankqueue1;import java.util.ArrayList;import java.util.List;/** * * 产生号码 * *  * @author HU * */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 fetchNumber() {Integer number = null;if (queueNumber.size() > 0)number = queueNumber.remove(0);return number;}}

 

NumberMachine
package cn.itcast.bankqueue1;/** * * 产生号码级别 号码管理器 * *  * @author HU * */public class NumberMachine {private NumberManager commonManager = new NumberManager();private NumberManager expressManager = new NumberManager();private NumberManager vipManager = new NumberManager();private NumberMachine() {}public static NumberMachine getInstance() {return instance;}private static NumberMachine instance = new NumberMachine();public NumberManager getCommonManager() {return commonManager;}public NumberManager getExpressManager() {return expressManager;}public NumberManager getVipManager() {return vipManager;}}


CustomerType枚举类

package cn.itcast.bankqueue1;/** * * 枚举类 客户类型 * *  * @author HU * */public enum CustomerType {COMMON, EXPRESS, VIP;@Overridepublic String toString() {switch (this) {case COMMON:return "普通";case EXPRESS:return "快速";case VIP:return name();}return null;}}

 

ServiceWindow
package cn.itcast.bankqueue1;import java.util.*;import java.util.concurrent.*;public class ServiceWindow{private CustomerType type = CustomerType.COMMON;private int number = 1;public CustomerType getType(){return type;}public void setType(CustomerType type){this.type = type;}public void setNumber(int number) {this.number = number;}public void start(){Executors.newSingleThreadExecutor().execute(new Runnable(){public void run() {while(true){switch(type){case COMMON:commonService();break;case EXPRESS:expressService();break;case VIP:vipService();break;}}}});}private void commonService(){String windowName = "第"+number +"号"+type +"窗口";System.out.println(windowName +"开始获取普通任务!");Integer serviceNumber = NumberMachine.getInstance().getCommonManager().fetchNumber();if(serviceNumber != null){System.out.println(windowName+"开始为第"+serviceNumber+"号普通客户服务");int maxRandom = Constants.MAX_SERVICE_TIME -Constants.MIN_SERVICE_TIME;int serviceTime = new Random().nextInt(maxRandom+1)+Constants.MIN_SERVICE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(windowName+" 完成为第"+serviceNumber+" 号普通客户服务,总共耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+" 没有取到普通任务,空闲1秒");try {Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}private void expressService(){Integer serviceNumber = NumberMachine.getInstance().getExpressManager().fetchNumber();String windowName = "第"+number +"号"+type +"窗口";System.out.println(windowName +"开始获取快速任务!");if(serviceNumber != null){System.out.println(windowName+"开始为第"+serviceNumber+"号快速客户服务");//int maxRandom = Constants.MAX_SERVICE_TIME -Constants.MIN_SERVICE_TIME;//int serviceTime = new Random().nextInt(maxRandom+1)+Constants.MIN_SERVICE_TIME;try {Thread.sleep(Constants.MIN_SERVICE_TIME);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(windowName+" 完成为第"+serviceNumber+" 号快速客户服务,总共耗时"+Constants.MIN_SERVICE_TIME/1000+"秒");}else{System.out.println(windowName+" 没有取到快速任务");commonService();}}private void vipService(){Integer serviceNumber = NumberMachine.getInstance().getVipManager().fetchNumber();String windowName = "第"+number +"号"+type +"窗口";System.out.println(windowName +"开始获取vip任务!");if(serviceNumber != null){System.out.println(windowName+"开始为第"+serviceNumber+"号vip客户服务");int maxRandom = Constants.MAX_SERVICE_TIME -Constants.MIN_SERVICE_TIME;int serviceTime = new Random().nextInt(maxRandom+1)+Constants.MIN_SERVICE_TIME;try {Thread.sleep(serviceTime);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(windowName+" 完成为第"+serviceNumber+" 号vip客户服务,总共耗时"+serviceTime/1000+"秒");}else{System.out.println(windowName+" 没有取到vip任务,空闲1秒");commonService();}}}

MainClass
package cn.itcast.bankqueue1;import java.util.concurrent.*;public class MainClass {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubfor(int i=1;i<5;i++){ServiceWindow commonWindow = new ServiceWindow();commonWindow.setNumber(i);commonWindow.start();}ServiceWindow expressWindow = new ServiceWindow();expressWindow.setType(CustomerType.EXPRESS);expressWindow.start();ServiceWindow vipWindow = new ServiceWindow();vipWindow.setType(CustomerType.VIP);vipWindow.start();Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run() {// TODO Auto-generated method stubint number =  NumberMachine.getInstance().getCommonManager().generateNewManager();System.out.println("第"+number+"号普通客户等待服务");}}, 0,Constants.COMMON_CUSTOMER_INTERVAL_TIME,TimeUnit.SECONDS);Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run() {// TODO Auto-generated method stubint number =  NumberMachine.getInstance().getExpressManager().generateNewManager();System.out.println("第"+number+"号快速客户等待服务");}}, 0,Constants.COMMON_CUSTOMER_INTERVAL_TIME*2,TimeUnit.SECONDS);Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable(){public void run() {// TODO Auto-generated method stubint number =  NumberMachine.getInstance().getVipManager().generateNewManager();System.out.println("第"+number+"号vip客户等待服务");}}, 0,Constants.COMMON_CUSTOMER_INTERVAL_TIME*6,TimeUnit.SECONDS);}}


 

Constants
package cn.itcast.bankqueue1;/** * * 定义静态常量 * *  * @author HU * */public class Constants {public static int MAX_SERVICE_TIME = 10000;public static int MIN_SERVICE_TIME = 1000;public static int COMMON_CUSTOMER_INTERVAL_TIME = 1;}


运行结果

第2号普通窗口开始获取普通任务!第1号普通窗口开始获取普通任务!第4号普通窗口开始获取普通任务!第3号普通窗口开始获取普通任务!第2号普通窗口 没有取到普通任务,空闲1秒第1号VIP窗口开始获取vip任务!第1号VIP窗口 没有取到vip任务,空闲1秒第1号VIP窗口开始获取普通任务!第1号VIP窗口 没有取到普通任务,空闲1秒第4号普通窗口 没有取到普通任务,空闲1秒第1号普通窗口 没有取到普通任务,空闲1秒第3号普通窗口 没有取到普通任务,空闲1秒第1号快速窗口开始获取快速任务!第1号快速窗口 没有取到快速任务第1号快速窗口开始获取普通任务!第1号快速窗口 没有取到普通任务,空闲1秒第1号普通客户等待服务第1号快速客户等待服务第1号vip客户等待服务第2号普通窗口开始获取普通任务!第2号普通客户等待服务第2号普通窗口开始为第1号普通客户服务第1号VIP窗口开始获取vip任务!第4号普通窗口开始获取普通任务!第1号普通窗口开始获取普通任务!第3号普通窗口开始获取普通任务!第1号快速窗口开始获取快速任务!第1号VIP窗口开始为第1号vip客户服务第4号普通窗口开始为第2号普通客户服务第1号普通窗口 没有取到普通任务,空闲1秒第3号普通窗口 没有取到普通任务,空闲1秒第1号快速窗口开始为第1号快速客户服务第1号普通窗口开始获取普通任务!第1号快速窗口 完成为第1 号快速客户服务,总共耗时1秒第1号普通窗口 没有取到普通任务,空闲1秒第1号快速窗口开始获取快速任务!第1号快速窗口 没有取到快速任务第3号普通客户等待服务第3号普通窗口开始获取普通任务!第1号快速窗口开始获取普通任务!第3号普通窗口开始为第3号普通客户服务第1号快速窗口 没有取到普通任务,空闲1秒第2号快速客户等待服务第4号普通窗口 完成为第2 号普通客户服务,总共耗时1秒第4号普通窗口开始获取普通任务!第4号普通窗口 没有取到普通任务,空闲1秒第2号普通窗口 完成为第1 号普通客户服务,总共耗时1秒第2号普通窗口开始获取普通任务!第2号普通窗口 没有取到普通任务,空闲1秒第1号普通窗口开始获取普通任务!第4号普通客户等待服务第1号普通窗口开始为第4号普通客户服务第1号快速窗口开始获取快速任务!第1号快速窗口开始为第2号快速客户服务第4号普通窗口开始获取普通任务!第4号普通窗口 没有取到普通任务,空闲1秒第2号普通窗口开始获取普通任务!第2号普通窗口 没有取到普通任务,空闲1秒第5号普通客户等待服务第3号快速客户等待服务第1号快速窗口 完成为第2 号快速客户服务,总共耗时1秒第1号快速窗口开始获取快速任务!第1号快速窗口开始为第3号快速客户服务第4号普通窗口开始获取普通任务!第4号普通窗口开始为第5号普通客户服务第2号普通窗口开始获取普通任务!第2号普通窗口 没有取到普通任务,空闲1秒第6号普通客户等待服务第1号快速窗口 完成为第3 号快速客户服务,总共耗时1秒第1号快速窗口开始获取快速任务!第1号快速窗口 没有取到快速任务第1号快速窗口开始获取普通任务!第1号快速窗口开始为第6号普通客户服务第1号普通窗口 完成为第4 号普通客户服务,总共耗时2秒第1号普通窗口开始获取普通任务!第1号普通窗口 没有取到普通任务,空闲1秒第2号普通窗口开始获取普通任务!第2号普通窗口 没有取到普通任务,空闲1秒第7号普通客户等待服务第4号快速客户等待服务第2号vip客户等待服务第1号普通窗口开始获取普通任务!第1号普通窗口开始为第7号普通客户服务第3号普通窗口 完成为第3 号普通客户服务,总共耗时4秒第3号普通窗口开始获取普通任务!第3号普通窗口 没有取到普通任务,空闲1秒第2号普通窗口开始获取普通任务!第2号普通窗口 没有取到普通任务,空闲1秒第8号普通客户等待服务第1号VIP窗口 完成为第1 号vip客户服务,总共耗时6秒第1号VIP窗口开始获取vip任务!第1号VIP窗口开始为第2号vip客户服务第3号普通窗口开始获取普通任务!第3号普通窗口开始为第8号普通客户服务第2号普通窗口开始获取普通任务!第2号普通窗口 没有取到普通任务,空闲1秒第4号普通窗口 完成为第5 号普通客户服务,总共耗时3秒第4号普通窗口开始获取普通任务!第4号普通窗口 没有取到普通任务,空闲1秒第9号普通客户等待服务第5号快速客户等待服务第2号普通窗口开始获取普通任务!第2号普通窗口开始为第9号普通客户服务第4号普通窗口开始获取普通任务!第4号普通窗口 没有取到普通任务,空闲1秒第10号普通客户等待服务第4号普通窗口开始获取普通任务!第4号普通窗口开始为第10号普通客户服务第11号普通客户等待服务第6号快速客户等待服务第1号快速窗口 完成为第6 号普通客户服务,总共耗时5秒第1号快速窗口开始获取快速任务!第1号快速窗口开始为第4号快速客户服务第12号普通客户等待服务第1号普通窗口 完成为第7 号普通客户服务,总共耗时4秒第1号普通窗口开始获取普通任务!第1号普通窗口开始为第11号普通客户服务第1号快速窗口 完成为第4 号快速客户服务,总共耗时1秒第1号快速窗口开始获取快速任务!第1号快速窗口开始为第5号快速客户服务第13号普通客户等待服务第7号快速客户等待服务第3号vip客户等待服务第3号普通窗口 完成为第8 号普通客户服务,总共耗时4秒第3号普通窗口开始获取普通任务!第3号普通窗口开始为第12号普通客户服务第1号快速窗口 完成为第5 号快速客户服务,总共耗时1秒第1号快速窗口开始获取快速任务!第1号快速窗口开始为第6号快速客户服务第4号普通窗口 完成为第10 号普通客户服务,总共耗时2秒第4号普通窗口开始获取普通任务!第4号普通窗口开始为第13号普通客户服务第14号普通客户等待服务第1号快速窗口 完成为第6 号快速客户服务,总共耗时1秒第1号快速窗口开始获取快速任务!第1号快速窗口开始为第7号快速客户服务第15号普通客户等待服务第8号快速客户等待服务第1号快速窗口 完成为第7 号快速客户服务,总共耗时1秒第1号快速窗口开始获取快速任务!第1号快速窗口开始为第8号快速客户服务第16号普通客户等待服务第1号VIP窗口 完成为第2 号vip客户服务,总共耗时7秒第1号VIP窗口开始获取vip任务!第1号VIP窗口开始为第3号vip客户服务第2号普通窗口 完成为第9 号普通客户服务,总共耗时6秒第2号普通窗口开始获取普通任务!第2号普通窗口开始为第14号普通客户服务第1号快速窗口 完成为第8 号快速客户服务,总共耗时1秒第1号快速窗口开始获取快速任务!第1号快速窗口 没有取到快速任务第1号快速窗口开始获取普通任务!第1号快速窗口开始为第15号普通客户服务第17号普通客户等待服务第9号快速客户等待服务第4号普通窗口 完成为第13 号普通客户服务,总共耗时3秒第4号普通窗口开始获取普通任务!第4号普通窗口开始为第16号普通客户服务第18号普通客户等待服务第1号VIP窗口 完成为第3 号vip客户服务,总共耗时2秒第1号VIP窗口开始获取vip任务!第1号VIP窗口 没有取到vip任务,空闲1秒第1号VIP窗口开始获取普通任务!第1号VIP窗口开始为第17号普通客户服务第19号普通客户等待服务第10号快速客户等待服务第4号vip客户等待服务第1号快速窗口 完成为第15 号普通客户服务,总共耗时2秒第1号快速窗口开始获取快速任务!第1号快速窗口开始为第9号快速客户服务

 

----------------------    android培训    java培训   期待与您交流!    ----------------------   

                         详细请查看      http://edu.csdn.net/heima