读书人

黑马软件工程师_java 银行调度系统

发布时间: 2013-04-02 12:35:26 作者: rapoo

黑马程序员_java 银行调度系统
??? ??? ???
??? ??? ??? Integer number = NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
??? ??? ??? System.out.println(windowName + "正在获取任务");
??? ??? ??? if(number != null)
??? ??? ??? {
??? ??? ??? ??? System.out.println(windowName + "为第" + number + "个" + type +
??? ??? ??? ??? ??? "客户服务");
??? ??? ??? ??? long biginTime = System.currentTimeMillis();
??? ??? ??? ??? int maxRandomTime = Constants.MAX_SERVICE_TIME -
??? ??? ??? ??? ??? Constants.MIN_SERVICE_TIME;
??? ??? ??? ??? long serverTime = new Random().nextInt(maxRandomTime) + 1 +
??? ??? ??? ??? ??? Constants.MIN_SERVICE_TIME;
??? ??? ??? ??? try {
??? ??? ??? ??? ??? Thread.sleep(serverTime);
??? ??? ??? ??? } catch (InterruptedException e) {
??? ??? ??? ??? ??? e.printStackTrace();
??? ??? ??? ??? }
??? ??? ??? ??? long costTime = System.currentTimeMillis() - biginTime;
??? ??? ??? ??? System.out.println(windowName + "为第" + number + "个" + type +
??? ??? ??? ??? ??? "客户完成服务,耗时" + 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 biginTime = System.currentTimeMillis();
??? ??? ??? ??? try {
??? ??? ??? ??? ??? Thread.sleep(Constants.MIN_SERVICE_TIME);
??? ??? ??? ??? } catch (InterruptedException e) {
??? ??? ??? ??? ??? e.printStackTrace();
??? ??? ??? ??? }
??? ??? ??? ??? long costTime = System.currentTimeMillis() - biginTime;
??? ??? ??? ??? System.out.println(windowName + "为第" + number + "个" + type +
??? ??? ??? ??? ??? "客户完成服务,耗时" + costTime / 1000 + "秒");
??? ??? ??? }else
??? ??? ??? {
??? ??? ??? ??? System.out.println(windowName + "没有取到任务!");
??? ??? ??? ??? commonService();
??? ??? ??? }
??? ??? }
??? ??? private void vipService() {
??? ??? ??? String windowName = "第" + windowId + "号" + type + "窗口";
??? ??? ???
??? ??? ??? Integer number = NumberMachine.getInstance().getVipManager().fetchServiceNumber();
??? ??? ??? System.out.println(windowName + "正在获取任务");
??? ??? ??? if(number != null)
??? ??? ??? {
??? ??? ??? ??? System.out.println(windowName + "为第" + number + "个" + type +
??? ??? ??? ??? ??? "客户服务");
??? ??? ??? ??? long biginTime = System.currentTimeMillis();
??? ??? ??? ??? int maxRandomTime = Constants.MAX_SERVICE_TIME -
??? ??? ??? ??? ??? Constants.MIN_SERVICE_TIME;
??? ??? ??? ??? long serverTime = new Random().nextInt(maxRandomTime) + 1 +
??? ??? ??? ??? ??? Constants.MIN_SERVICE_TIME;
??? ??? ??? ??? try {
??? ??? ??? ??? ??? Thread.sleep(serverTime);
??? ??? ??? ??? } catch (InterruptedException e) {
??? ??? ??? ??? ??? e.printStackTrace();
??? ??? ??? ??? }
??? ??? ??? ??? long costTime = System.currentTimeMillis() - biginTime;
??? ??? ??? ??? System.out.println(windowName + "为第" + number + "个" + type +
??? ??? ??? ??? "客户完成服务,耗时" + costTime / 1000 + "秒");
??? ??? ??? }else
??? ??? ??? {
??? ??? ??? ??? System.out.println(windowName + "没有取到任务!");
??? ??? ??? ??? commonService();
??? ??? ??? }
??? ??? }
??? }
??? package com.itheima.interview.bank;
??? /**
??? ?* CustomerType枚举类:
??? ?*??? 分析:
??? ?* ??? 1:系统中有三种类型的客户,所以用定义一个枚举类,其中定义三个成员分别表示三种类型的客户。
??? ?*??? 2:重写toString方法,返回类型的中文名称。这是在后面编码时重构出来的,刚开始不用考虑。
??? ?* @author xiedong
??? ?*
??? ?*/
??? public enum CustomerType {
??? ??? COMMON, EXPRESS, VIP;
??? ??? public String toString()
??? ??? {
??? ??? ??? switch(this)
??? ??? ??? {
??? ??? ??? case COMMON:
??? ??? ??? ??? return "COMMON";
??? ??? ??? case EXPRESS:
??? ??? ??? ??? return "EXPRESS";
??? ??? ??? case VIP:
??? ??? ??? ??? return name();
??? ??? ??? }
??? ??? ??? return null;
??? ??? }
??? }
??? package com.itheima.interview.bank;
??? /**
??? ?* Constants类
??? ?*??? 定义三个常量:MAX_SERVICE_TIME、MIN_SERVICE_TIME、COMMON_CUSTOMER_INTERVAL_TIME
??? ?* @author xiedong
??? ?*
??? ?*/
??? 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;
??? }
??? package com.itheima.interview.bank;

??? import java.util.concurrent.Executors;
??? import java.util.concurrent.TimeUnit;
??? /**
??? ?* 测试类:
??? ?* 1:用for循环创建出4个普通窗口,再创建出1个快速窗口和一个VIP窗口。
??? ?* 2:接着再创建三个定时器,分别定时去创建新的普通客户号码、新的快速客户号码、新的VIP
??? ?*??? 客户号码。
??? ?* @author xiedong
??? ?*
??? ?*/
??? public class MainApp {
??? ??? public static void main(String[] args) {
??? ??? ??? //产生4个普通窗口
??? ??? ??? for(int i = 1; i < 5; i++)
??? ??? ??? {
??? ??? ??? ??? ServiceWindow commonWindow = new ServiceWindow();
??? ??? ??? ??? commonWindow.setWindowId(i);
??? ??? ??? ??? commonWindow.start();
??? ??? ??? }
??? ??? ??? //产生1个快速窗口
??? ??? ??? ServiceWindow expressWindow = new ServiceWindow();
??? ??? ??? expressWindow.setType(CustomerType.EXPRESS);
??? ??? ??? expressWindow.start();
??? ??? ??? //产生1个VIP窗口???
??? ??? ??? ServiceWindow vipWindow = new ServiceWindow();
??? ??? ??? vipWindow.setType(CustomerType.VIP);
??? ??? ??? vipWindow.start();
??? ??? ??? //普通客户拿号
??? ??? ??? Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
??? ??? ??? ??? @Override
??? ??? ??? ??? public void run()
??? ??? ??? ??? {
??? ??? ??? ??? ??? Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager();
??? ??? ??? ??? ??? System.out.println("第" + number + "号普通客户等待服务!");
??? ??? ??? ??? }
??? ??? ??? }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS);
??? ??? ??? //快速客户拿号
??? ??? ??? Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
??? ??? ??? ??? @Override
??? ??? ??? ??? public void run()
??? ??? ??? ??? {
??? ??? ??? ??? ??? Integer number = NumberMachine.getInstance().getExpressManager().generateNewManager();
??? ??? ??? ??? ??? System.out.println("第" + number + "号快速客户等待服务!");
??? ??? ??? ??? }
??? ??? ??? }, 0, 2 * Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS);
??? ??? ??? //VIP客户拿号
??? ??? ??? Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
??? ??? ??? ??? @Override
??? ??? ??? ??? public void run()
??? ??? ??? ??? {
??? ??? ??? ??? ??? Integer number = NumberMachine.getInstance().getVipManager().generateNewManager();
??? ??? ??? ??? ??? System.out.println("第" + number + "号Vip客户等待服务!");
??? ??? ??? ??? }
??? ??? ??? }, 0, 6 * Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS);
??? ??? }
??? }

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

读书人网 >编程

热点推荐