黑马程序员技术交流社区

标题: 学银行调度系统的时候,感觉有点晕,大神帮忙屡屡头绪 [打印本页]

作者: 葛奎    时间: 2012-11-21 20:17
标题: 学银行调度系统的时候,感觉有点晕,大神帮忙屡屡头绪
package cn.itcast.bankqueue;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
public class MainClass {

private static Logger logger = Logger.getLogger("cn.itcast.bankqueue");
public static void main(String[] args) {
  //产生4个普通窗口
  for(int i=1;i<5;i++){
   ServiceWindow window =  new ServiceWindow();
   window.setNumber(i);
   window.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(){
     public void run(){
      Integer serviceNumber = NumberMachine.getInstance().getCommonManager().generateNewNumber();
      /**
       * 采用logger方式,无法看到直观的运行效果,因为logger.log方法内部并不是直接把内容打印出出来,
       * 而是交给内部的一个线程去处理,所以,打印出来的结果在时间顺序上看起来很混乱。
       */
      //logger.info("第" + serviceNumber + "号普通客户正在等待服务!");
      System.out.println("第" + serviceNumber + "号普通客户正在等待服务!");      
     }
    },
    0,
    Constants.COMMON_CUSTOMER_INTERVAL_TIME,
    TimeUnit.SECONDS);
  
  //快速客户拿号
  Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
    new Runnable(){
     public void run(){
      Integer serviceNumber = NumberMachine.getInstance().getExpressManager().generateNewNumber();
      System.out.println("第" + serviceNumber + "号快速客户正在等待服务!");
     }
    },
    0,
    Constants.COMMON_CUSTOMER_INTERVAL_TIME * 2,
    TimeUnit.SECONDS);
  
  //VIP客户拿号
  Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
    new Runnable(){
     public void run(){
      Integer serviceNumber = NumberMachine.getInstance().getVipManager().generateNewNumber();
      System.out.println("第" + serviceNumber + "号VIP客户正在等待服务!");
     }
    },
    0,
    Constants.COMMON_CUSTOMER_INTERVAL_TIME * 6,
    TimeUnit.SECONDS);
}
}
//给了开启的窗口和用户拿完号之后,他们是怎么联系工作的,线程是怎么运转的?越详细越好  谢啦

作者: 葬天    时间: 2012-11-21 20:44
个人理解:

   主要 弄清 共享数据  
   也就 是 号码

你会 明白 这个 业务 就是
生产者消费者 的 逻辑
可以将 大厅 顾客 定时取号 看成 生产者
窗口 服务 也就是消费者

其它 东西 就是Coding了 。。。。。





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