---------------------- android培训、java培训、期待与您交流! ----------------------
与之前的交通灯系统一样,在开发本系统时,先要对需求进行充分了解,然后把项目的设计方法和逻辑弄清楚,再开始项目开发。因为之前已经学习过了项目设计方法,本篇主要是介绍在开发阶段涉及的关键代码。
首先,编写的是NumberManager和NumberMachine类。
当2个不同的线程访问相同的数据queueNumber就会出问题。要让他们之前互斥使用了synchronized,因为queueNumber.remove(0)有可能会取到null,null要返回int就会产生空指针,程序会产生异常。所以在这里使用Integer可以对数据自动进行拆箱和装箱。
public class NumberManager { private int lastNumber = 1; private List<Integer> queueNumber = new ArrayList<Integer>(); public synchronized Integer generateNewManager(){ queueNumber.add(lastNumber); return lastNumber++; } public synchronized Integer fetchServiceNumber(){ Integer number = null; if(queueNumber.size() > 0){ return queueNumber.remove(0); } return number; } } |
添加单例的概念将NumberMachine类设计成单例。
//单例 //首先构造方法,私有化只能静态调用 private NumberMachine(){} public static NumberMachine getInstance(){ return instance; } private static NumberMachine instance = new NumberMachine(); |
随机产生有基数的数
int maxRand = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME; long serviceTime = new Random().nextInt(maxRand) + 1 + Constants.MIN_SERVICE_TIME; |
然后是编写CustomerType枚举类,对枚举的toString()方法进行重写,使其可在调用枚举元素时将其用中文显示。
public enum CustomerType { COMMON,EXPRESS,VIP; public String toString(){ switch(this){ case COMMON: return "普通窗口"; case EXPRESS: return "快速窗口"; case VIP: return name();//name()方法返回枚举的名字 VIP } return null; } } |
接下来就是创建服务窗口,编写一个ServiceWindow类
private void commonService() { Integer number = NumberMachine.getInstance().getCommonManager().fetchServiceNumber(); if(number != null){ long beginTime = System.currentTimeMillis(); int maxRand long serviceTime = new Random().nextInt(maxRand) Thread.sleep(serviceTime); long costTime = System.currentTimeMillis() - beginTime; }else{ Thread.sleep(1000); } |
最后是编写创建主线程MainClass类,异步概率比例生成各种类型的客户
Executors.newScheduledThreadPool(1).scheduleAtFixedRate( new Runnable(){ public void run(){ Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager(); } }, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS ); |
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima