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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© H._张_♂ 中级黑马   /  2014-4-4 17:41  /  665 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

银行系统中,一共六个线程,每个线程都执行服务方法,我想不明白的是源码中是怎么实现每种客户的编号分离的?还有,明明在等待那段代码中,只调用public synchronized Integer generateNewNumber(){
                queueNumbers.add(++lastNumber);
                return lastNumber;
        }。这个函数,那这里面是怎么实现不同种类客户分类的?

3 个回复

倒序浏览
看代码中的提示,不知道这样说你能不能明白。
  1. //1.不同类型的用户是通过new 不同的号码管理器(NumberManager)来实现的。
  2. public class NumberMachine {
  3.         //设计成单例
  4.         //...部分代码省略
  5.         //2.创建三个不同用户的号码管理器对象,即产生不同的三种用户。
  6.         //3.六个线程(即六个窗口),其中四个线程共同处理普通用户(normalUser)中的号码,即操作共享数据,另外两个线程各操作fastUser和vipUser中的号码。
  7.         private NumberManager normalUser = new NumberManager();
  8.         private NumberManager fastUser = new NumberManager();
  9.         private NumberManager vipUser = new NumberManager();
  10.         //4.再用方法获取这三种不同的用户。
  11.         public NumberManager getNormalUser() {
  12.                 return normalUser;
  13.         }
  14.         public NumberManager getFastUser() {
  15.                 return fastUser;
  16.         }
  17.         public NumberManager getVipUser() {
  18.                 return vipUser;
  19.         }       
  20. }
复制代码



评分

参与人数 1技术分 +1 收起 理由
itpower + 1

查看全部评分

回复 使用道具 举报
  1. //发号器。仅有一个,设置成为单例。
  2. //仅有发号功能,不提供set方法。
  3. public class NumberMachine {
  4.         private NumberManager commonManager = new NumberManager();
  5.         private NumberManager expressManager = new NumberManager();
  6.         private NumberManager vipManager = new NumberManager();
  7.         
  8.         private static NumberMachine instance = new NumberMachine();
  9.         
  10.         private NumberMachine(){}
  11.         
  12.         public static NumberMachine getInstance(){
  13.                 return instance;
  14.         }
  15.         
  16.         
  17.         public NumberManager getCommonManager() {
  18.                 return commonManager;
  19.         }
  20.         public NumberManager getExpressManager() {
  21.                 return expressManager;
  22.         }
  23.         public NumberManager getVipManager() {
  24.                 return vipManager;
  25.         }
  26. }
复制代码


在发号器的类中,已经进行了分类。
分别有:
public NumberManager getCommonManager()
public NumberManager getExpressManager()
public NumberManager getVipManager()后续的功能调用也严格区分了号码管理器的类别。参见张老师那几个swith

这三个分别是一个NumberManager管理对象。
回复 使用道具 举报
每一个线程的数据时单独的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马