A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 tuanjie 于 2014-1-3 14:45 编辑
  1. package cn.itcast.bankqueue;

  2. import java.util.Random;
  3. import java.util.concurrent.Executors;
  4. import java.util.logging.Logger;

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

  12.         public CustomerType getType() {
  13.                 return type;
  14.         }

  15.         public void setType(CustomerType type) {
  16.                 this.type = type;
  17.         }
  18.        
  19.         public void setNumber(int number){
  20.                 this.number = number;
  21.         }
  22.        
  23.         public void start(){
  24.                 Executors.newSingleThreadExecutor().execute(
  25.                                 new Runnable(){
  26.                                         public void run(){
  27.                                                 //下面这种写法的运行效率低,最好是把while放在case下面
  28.                                                 while(true){
  29.                                                         switch(type){
  30.                                                                 case COMMON:
  31.                                                                         commonService();
  32.                                                                         break;
  33.                                                                 case EXPRESS:
  34.                                                                         expressService();
  35.                                                                         break;
  36.                                                                 case VIP:
  37.                                                                         vipService();
  38.                                                                         break;
  39.                                                         }
  40.                                                 }
  41.                                         }
  42.                                 }
  43.                 );
  44.         }
  45.        
  46.         private void commonService(){
  47.                 String windowName = "第" + number + "号" + type + "窗口";               
  48.                 System.out.println(windowName + "开始获取普通任务!");
  49.                 Integer serviceNumber = NumberMachine.getInstance().getCommonManager().fetchNumber();               
  50.                 if(serviceNumber != null ){
  51.                         System.out.println(windowName + "开始为第" + serviceNumber + "号普通客户服务");               
  52.                         int maxRandom = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;
  53.                         int serviceTime = new Random().nextInt(maxRandom)+1 + Constants.MIN_SERVICE_TIME;
  54.        
  55.                         try {
  56.                                 Thread.sleep(serviceTime);
  57.                         } catch (InterruptedException e) {
  58.                                 e.printStackTrace();
  59.                         }       
  60.                         System.out.println(windowName + "完成为第" + serviceNumber + "号普通客户服务,总共耗时" + serviceTime/1000 + "秒");               
  61.                 }else{
  62.                         System.out.println(windowName + "没有取到普通任务,正在空闲一秒");               
  63.                         try {
  64.                                 Thread.sleep(1000);
  65.                         } catch (InterruptedException e) {
  66.                                 e.printStackTrace();
  67.                         }                               
  68.                 }
  69.         }
  70.        
  71.         private void expressService(){
  72.                 Integer serviceNumber = NumberMachine.getInstance().getExpressManager().fetchNumber();
  73.                 String windowName = "第" + number + "号" + type + "窗口";       
  74.                 System.out.println(windowName + "开始获取快速任务!");               
  75.                 if(serviceNumber !=null){
  76.                         System.out.println(windowName + "开始为第" + serviceNumber + "号快速客户服务");                       
  77.                         int serviceTime = Constants.MIN_SERVICE_TIME;
  78.                         try {
  79.                                 Thread.sleep(serviceTime);
  80.                         } catch (InterruptedException e) {
  81.                                 e.printStackTrace();
  82.                         }               
  83.                         System.out.println(windowName + "完成为第" + serviceNumber + "号快速客户服务,总共耗时" + serviceTime/1000 + "秒");               
  84.                 }else{
  85.                         System.out.println(windowName + "没有取到快速任务!");                               
  86.                         commonService();
  87.                 }
  88.         }
  89.        
  90.         private void vipService(){

  91.                 Integer serviceNumber = NumberMachine.getInstance().getVipManager().fetchNumber();
  92.                 String windowName = "第" + number + "号" + type + "窗口";       
  93.                 System.out.println(windowName + "开始获取VIP任务!");                       
  94.                 if(serviceNumber !=null){
  95.                         System.out.println(windowName + "开始为第" + serviceNumber + "号VIP客户服务");                       
  96.                         int maxRandom = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;
  97.                         int serviceTime = new Random().nextInt(maxRandom)+1 + Constants.MIN_SERVICE_TIME;
  98.                         try {
  99.                                 Thread.sleep(serviceTime);
  100.                         } catch (InterruptedException e) {
  101.                                 e.printStackTrace();
  102.                         }               
  103.                         System.out.println(windowName + "完成为第" + serviceNumber + "号VIP客户服务,总共耗时" + serviceTime/1000 + "秒");               
  104.                 }else{
  105.                         System.out.println(windowName + "没有取到VIP任务!");                               
  106.                         commonService();
  107.                 }       
  108.         }
  109. }
复制代码
在//下面这种写法的运行效率低,最好是把while放在case下面,说把while循环语句放在switch的case语句下面,效率会更好,请问原因是什么?

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 淡定

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马