---------------------- android培训、java培训、期待与您交流! ----------------------
银行项目需求
1-4普通 5快速 6VIP
异步随机生成6:3:1
业务处理时间最大/最小 快速(最小时间)sleep
快速和VIP空闲,可以处理普通
随机生成客户间隔 log
首先要搞清项目内容
我认为最最最重要的还是项目的面向对象分析与设计
提取类和对象的信息
客户是由取号机器产生 号码管理器对象
三类客户编码独立
机器单例————三个管理器对象
窗口向管理器要服务号
com.isoftstone.interview.bank;
NumberNewManager{
private int lastNumber = 1;
private List<Integer> queueNumber = new ArrayList<Integer>();//动态数组,集合
public synchronized int generateNewManager(){
queueNumber.add(lastNumber);
return lastNumber++;
}
public synchronized int//Integer#自动拆箱装箱# fetchServiceNumber(){
return queueNumber.remove(0);//可能取不到,可能null异常
}
//两个线程访问了相同的数据就会出错
}
NumberMachine{
//产生三个号码管理器
private NumberManager commonManager = new NumberManager();
expressManager
vipManager
生成三者的get方法
把NumberMachine设计成单例
}
服务窗口
private CustomType type = CustomerType.COMMON;//1\2\3枚举限制,默认值用得最多
private int windowId = 1;//可以作为构造方法的参数
public void start(){
Executors.newSingleThreadExecutor().execute(new Runnable(){public void run(){
while(true)
{
String windowName = "" + windowId + "号" +type+ "窗口";
if/swtich语句判断Type值,生成相应的号码管理器
//生成普通客户服务号
Integer number = NumberMachine.getInstance().getCommonManager().FetchServicNumber();
判断number是否null值;
System.currentTimeMillis();
消耗的时间=当前时间-beginTime
Thread.sleep(severTime);
long serverTime=new Random().nextInt(最大-最小)+1+最小时间;
Constacts(常量)设计成类
public static int MAX_SERVICE_TIME = 10000;
}
}});
}
???if else switch 效率
public enum CustomerType{
COMMON,EXPRESS,VIP;
}
vip和快速 可以作为 Common 的子类
把需要需要的修改的部分抽象成方法
子类覆盖抽象的方法
main class
for(int i=1;i<5;i++)
{ServiceWindow commonWindow = new ServiceWindow();
window.setWindowId();//vipWindow.setType(CustomerType.COMMON)
commonWindow.start(i);}
模拟顾客
Executors.newScheduledThreadPool(1).scheduleAtFixedRate{
new Runnable(){
public void run(){
Integer number = NumberMachine.getInstance().getCommonManager().generateNewManager();
}
},//command
0,//initialDelay
1,//1
TimeUnit.SECONDS//单位,定义常量
}
fetchServiceNumber()
Integer number = null;
if(queueNumber.size()>0)
{number = queueNumber.remove(0);}
return number
注意打印的对象
---------------------- android培训、java培训、期待与您交流! ----------------------