------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
1. 首先我们要先建立一个号码管理器;
里面有取号动作(获取号码的动作),和存储号码的动作;
这时就会用到集合,通过集合的方式将取出来的号码进行存储;
// 产生客户号码;并且加到集合中;
public synchronized Integer generateNewNumber(){
queueNumbers.add(++lastNumber);
return lastNumber;
}
// 取到我们最先添加进去的客户号码;
public synchronized Integer fetchNumber(){
if(queueNumbers.size()>0){
return (Integer)queueNumbers.remove(0);
}else{
return null;
}
}
因为它queueNumbers.remove(0)的返回类型是元素,所以;就具有获取集合中的元素功能。
2. 我们要设计一个单例模式,从一个机器上取出三类号码;通过三类号码来获取集合中的元素,也可以在集合中产生元素;
3. 通过枚举类来获取对象的名称;
public enum CustomerType {
COMMON,EXPRESS,VIP;
public String toString(){
String name = null;
switch(this){
case COMMON:
name = "普通";
break;
case EXPRESS:
name = "快速";
break;
case VIP:
// 枚举常量的名称,这里返回就是vip
name = name();
break;
}
return name;
}
}
4. 每产生一个窗口,我们都会启动开启窗口的线程;
public void start(){
建立一个线程;执行只有一个参数,这里面就是线程;
Executors.newSingleThreadExecutor().execute(
new Runnable(){
public void run(){
//下面这种写法的运行效率低,最好是把while放case下面
while(true){
switch(type){
case COMMON:
commonService();
break;
case EXPRESS:
expressService();
break;
case VIP:
vipService();
break;
}
}
}
}
);
5. 线程里面的执行方法解析;
private void commonService(){
默认的是第1号,普通窗口;type的值,就是枚举里面的ToString里面的值;
String windowName = "第" + number + "号" + type + "窗口";
System.out.println(windowName + "开始获取普通任务!");
产生对象获取号码;
Integer serviceNumber = NumberMachine.getInstance()
.getCommonManager().fetchNumber();
if(serviceNumber != null ){
System.out.println(windowName + "开始为第" + serviceNumber + "号普通客户服务");
获取serviceTime时间;serviceTime是0到10秒之间随机产生;
int maxRandom = Constants.MAX_SERVICE_TIME - Constants.MIN_SERVICE_TIME;
int serviceTime = new Random().nextInt(maxRandom)+1 + Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(windowName + "完成为第" + serviceNumber +
"号普通客户服务,总共耗时" + serviceTime/1000 + "秒");
//获取到的号码要是为空的话;
}else{
System.out.println(windowName + "没有取到普通任务,正在空闲一秒");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
6. 客户拿到号码代码解析
//普通客户拿号
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable(){
public void run(){
//从机器中产生一个号码;
Integer serviceNumber = NumberMachine.getInstance().
getCommonManager().generateNewNumber();
//拿到号码;
System.out.println("第" + serviceNumber + "号普通客户正在等待服务!");
}
},
0,
Constants.COMMON_CUSTOMER_INTERVAL_TIME,
TimeUnit.SECONDS);
7. 银行系统里面用到的知识点总结;
1、集合;
2、同步代码块;
3、单例模式;
4、枚举类
5、1.5的新特性线程池;包括定时线程,和不定时线程两种;
相关推荐
黑马程序员入学面试题,复习必备,事半功倍。
02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-...
Asp.net中级程序员_面试题,绝对经典,ASP.NET,数据库,Webservice,设计模式,几乎涵盖了所有的相关知识,设置这个分绝对有其价值!
Aspnet中级程序员_面试题 京华志&精华志出品 分享资源 C# ASP.NET SQL DBA 源码
JAVA程序员面试的常用面试题讲解视频,非常到位
软通动力面试题——银行业务调度系统(张老师),编码仅供参考。
此资源包含内容: 1,银行业务调度系统需求; 2,银行业务调度系统面试题; 3,银行业务调度系统实现代码;
程序员面试题精选程序员面试题精选程序员面试题程序员面试题精选精选
Android面试宝典包含两个宝典: 1【黑马项目宝典】虐面试官神器之必备黑马程序员项目宝典V1.1 内容包括:(1)电子商城(2)ListView系列(3)图像处理(4)动画效果(5)控件大全(6)新闻资讯(7)生活相关(8)...
java程序员早期面试题汇总 BAT经典面试题汇总.pdf Java常考面试题.pdf java面试题(题库全).doc java面试题-外企软件工程师面试题大全.rar 程序员面试题精选100题.pdf ... --------------------------------...
C#_面试题_总结_2,希望对大家有所帮助。
7K月薪面试题____银行业务调度系统(自己练习的demo)
1000道Java 程序员必备面试题-V1版.pdf
程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题
资源名称:JAVA Android面试题讲解视频资源目录:【】2012黑马程序员01_面试题【】2012黑马程序员02_面试题【】2012黑马程序员03_面试题【】2012黑马程序员04_面试题【】225ce844c6c817e9614d8f17ea70a640【】...
初出茅庐的程序员面试必看!!!!漂亮的面试回答
中级程序员必备面试题.txt
程序员 必备 面试题 Accp 5.0 S2 程序员 必备 面试题 Accp 5.0 S2
程序员面试题程序员面试题程序员面试题程序员面试题程序员面试题
收集了很多师兄师姐出去就业后,收集回来的企业面试.net程序员的面试题啊!不容易啊!1-8份面试题,好好看啊!都是技术题,祝面试上自己喜欢的职业