黑马程序员技术交流社区

标题: 银行业务调度系统中的一个疑问 [打印本页]

作者: meng    时间: 2013-8-23 00:00
标题: 银行业务调度系统中的一个疑问
本帖最后由 meng 于 2013-8-30 06:48 编辑


这个项目中有三类服务窗口,普通窗口,快速窗口和VIP窗口,我存在的疑问是为什么VIP窗口如果空闲了要去为普通窗口服务,而不是先为快速窗口服务,然后再为普通窗口服务.部分代码如下(疑问在红色代码部分).

package cn.itcast.bankqueue;

import java.util.Random;
import java.util.concurrent.Executors;
import java.util.logging.Logger;

/**
* 没有把VIP窗口和快速窗口做成子类,是因为实际业务中的普通窗口可以随时被设置为VIP窗口和快速窗口。
* */
public class ServiceWindow {
       privatestatic Logger logger = Logger.getLogger("cn.itcast.bankqueue");
       privateCustomerType type = CustomerType.COMMON;
       privateint number = 1;

       publicCustomerType getType() {
              returntype;
       }

       publicvoid setType(CustomerType type) {
              this.type= type;
       }

       publicvoid setNumber(int number){
              this.number= number;
       }

       publicvoid start(){
              Executors.newSingleThreadExecutor().execute(
                            newRunnable(){
                                   publicvoid run(){
                                          //下面这种写法的运行效率低,最好是把while放在case下面
                                          while(true){
                                                 switch(type){
                                                        caseCOMMON:
                                                               commonService();
                                                               break;
                                                        caseEXPRESS:
                                                               expressService();
                                                               break;
                                                        caseVIP:
                                                               vipService();
                                                               break;
                                                 }
                                          }
                                   }
                            }
              );
       }

       privatevoid commonService(){
              StringwindowName = "" + number + "" + type + "窗口";         
              System.out.println(windowName+ "开始获取普通任务!");
              IntegerserviceNumber = NumberMachine.getInstance().getCommonManager().fetchNumber();           
              if(serviceNumber!= null ){
                     System.out.println(windowName+ "开始为第" +serviceNumber + "号普通客户服务");              
                     intmaxRandom = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;
                     intserviceTime = new Random().nextInt(maxRandom)+1 + Constants.MIN_SERVICE_TIME;

                     try{
                            Thread.sleep(serviceTime);
                     }catch (InterruptedException e) {
                            e.printStackTrace();
                     }     
                     System.out.println(windowName+ "完成为第" +serviceNumber + "号普通客户服务,总共耗时" + serviceTime/1000 + "");            
              }else{
                     System.out.println(windowName+ "没有取到普通任务,正在空闲一秒");           
                     try{
                            Thread.sleep(1000);
                     }catch (InterruptedException e) {
                            e.printStackTrace();
                     }                          
              }
       }

       privatevoid expressService(){
              IntegerserviceNumber = NumberMachine.getInstance().getExpressManager().fetchNumber();
              StringwindowName = "" + number + "" + type + "窗口";   
              System.out.println(windowName+ "开始获取快速任务!");            
              if(serviceNumber!=null){
                     System.out.println(windowName+ "开始为第" +serviceNumber + "号快速客户服务");                     
                     intserviceTime = Constants.MIN_SERVICE_TIME;
                     try{
                            Thread.sleep(serviceTime);
                     }catch (InterruptedException e) {
                            e.printStackTrace();
                     }            
                     System.out.println(windowName+ "完成为第" +serviceNumber + "号快速客户服务,总共耗时" + serviceTime/1000 + "");            
              }else{
                     System.out.println(windowName+ "没有取到快速任务!");                        
                     commonService();
              }
       }

       privatevoid vipService(){

              IntegerserviceNumber = NumberMachine.getInstance().getVipManager().fetchNumber();
              StringwindowName = "" + number + "" + type + "窗口";   
              System.out.println(windowName + "开始获取VIP任务!");                    
              if(serviceNumber!=null){
                     System.out.println(windowName+ "开始为第" +serviceNumber + "VIP客户服务");                     
                     intmaxRandom = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;
                     intserviceTime = new Random().nextInt(maxRandom)+1 + Constants.MIN_SERVICE_TIME;
                     try{
                            Thread.sleep(serviceTime);
                     }catch (InterruptedException e) {
                            e.printStackTrace();
                     }            
                     System.out.println(windowName+ "完成为第" +serviceNumber + "VIP客户服务,总共耗时"+ serviceTime/1000 + "");            
              }else{
                     System.out.println(windowName+ "没有取到VIP任务!");                        
                     commonService();//此处是不是应该修改成expressService更好呢?
              }     
       }
}


作者: 老衲玩IT    时间: 2013-8-23 00:14
一般客户的数量多服务的命中概率更高
作者: 神之梦    时间: 2013-8-23 00:17
快速窗口一般忙得过来,事实上银行有快速窗口的很少,而vip窗口倒是很常见,这点你可以去银行逛逛
作者: 以防万一    时间: 2013-8-30 00:23

{:soso_e176:}
亲,请问下问题是否解决?
如果已解决请及时将未解决改为已解决
如果未解决请回帖追问
三天未回复的将视为已解决
详情参考:如何更改分类

保持队形,谢谢合作
{:soso_e181:}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2