黑马程序员 – 学习银行业务调度系统 – 2012.12.28
来源:互联网 发布:魔法王座升阶数据汇总 编辑:程序博客网 时间:2024/05/17 09:39
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
昨天学习了张孝祥老师的银行业务调度系统视频,今天回顾一下看完视频后不解的地方和张老师提及的代码优化。
1. 产生1000 –10000的随机数
我的想法是:
有一个最小值Constants.MIN_SERVICE_TIME是1000,
最大值Constants.MIN_SERVICE_TIMEmaxRand是10000,maxRand是9000,
先产生0 – 9000的随机数:newRandom().nextInt(maxRand + 1);
再加上最小值,这样就产生了1000– 10000的随机数。
最后的代码:
long serveTime = new Random().nextInt(maxRand+ 1) + Constants.MIN_SERVICE_TIME;
2.ServiceWindow类代码优化
张老师在视频中提及为了提高代码的复用性,在ServiceWindow 中抽出重复代码的方法,
我的思路代码是:
package com.isoftstone.interview.bank;
import java.util.Random;
import java.util.concurrent.Executors;
public class ServiceWindow2 {
private CustomerTypetype;
private intwindowID;
private longserviceTime;
private Integernumber;
//窗口开始提供服务
public voidstart(){
Executors.newSingleThreadExecutor().execute(
new Runnable(){
publicvoid run() {
while(true){
service();
}
}
}
);
}
//*抽出窗口的服务方法,普通窗口服务普通客户,快速窗口和vip窗口在没有对应客户时服务普通客户
private voidservice() {
String windowName = "第" +windowID+ "号" +type +"窗口";
number =getNumber();
System.out.println(windowName +"正在获取任务");
if(number!=null){
System.out.println(windowName +"正在为第" +number + "个" +type + "客户服务");
serving(windowName);
}else{
System.out.println(windowName +"没有取到" +type + "任务");
if(type==CustomerType.COMMON){
rest();
}else{
offerOtherTypeService();
}
}
}
//*抽象出快速窗口和vip窗口提供普通服务的方法
private voidofferOtherTypeService(){
String windowName = "第" +windowID+ "号" +type +"窗口";
number =NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
System.out.println(windowName +"正在获取任务");
if(number!=null){
System.out.println(windowName +"正在为第" +number + "个普通客户服务");
serving(windowName);
}else{
System.out.println(windowName +"没有取到普通任务");
rest();
}
}
//*抽出休息的方法
private voidrest() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//*抽出服务进行中的方法
private voidserving(String windowName) {
long beginTime = System.currentTimeMillis();
serviceTime = serveTime();
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
long costTime = System.currentTimeMillis()- beginTime;
System.out.println(windowName +"为第" +number+ "个普通客户完成服务,耗时" + costTime/1000 +"秒");
}
//*抽象出获得号码方法
public Integer getNumber(){
switch(type){
case COMMON :
return NumberMachine.getInstance().getCommonManager().fetchServiceNumber();
case FAST :
return NumberMachine.getInstance().getFastManager().fetchServiceNumber();
case VIP :
return NumberMachine.getInstance().getVipManager().fetchServiceNumber();
}
return null;
}
//*抽象出服务时间的方法
public longserveTime(){
int maxRand = Constants.MAX_SERVICE_TIME- Constants.MIN_SERVICE_TIME;
serviceTime = newRandom().nextInt(maxRand + 1) + Constants.MIN_SERVICE_TIME;
switch(type){
case COMMON :
returnserviceTime;
case FAST :
return Constants.MIN_SERVICE_TIME;
case VIP :
returnserviceTime;
}
return 1;
}
}
- 黑马程序员 – 学习银行业务调度系统 – 2012.12.28
- 黑马程序员:银行业务调度系统学习
- 黑马程序员 银行业务调度系统学习笔记
- "黑马程序员”银行业务调度系统学习日志
- 黑马程序员---银行业务调度系统学习笔记
- 黑马程序员--银行业务调度系统学习
- 《黑马程序员》银行业务调度系统--学习笔记
- 黑马程序员-银行业务调度系统学习笔记
- 【黑马程序员】银行业务调度系统学习总结
- 黑马程序员----银行业务调度系统学习笔记
- 黑马程序员_Java学习日记28_银行业务调度系统
- 黑马程序员---银行业务调度系统
- <黑马程序员>银行业务调度系统
- 【黑马程序员】银行业务调度系统
- 黑马程序员--银行业务调度系统
- 《黑马程序员》 银行业务调度系统
- 黑马程序员-----银行业务调度系统
- 黑马程序员--银行业务调度系统
- 获取上一个月第一天的日期和天数
- 初学Qt之--带参数的信号和槽的实现(入门级)
- 服务器和PC Server介绍
- mysqlsla安装配置
- 【转载】 风格之争:Coroutine模型 vs 非阻塞/异步IO(callback)
- 黑马程序员 – 学习银行业务调度系统 – 2012.12.28
- 从硬盘安装ghost版本win7出现abort:10100 invalid switch:nou的解决方法
- Ubuntu手机版发布 体验操作系统背后的技术
- Asp.Net中在页面中显示XML
- 动态改变DataWindow控件窗口中内容的几种实现方法
- Shell编程:字符串与数值之间的转换与计算
- HDU1379:DNA Sorting
- MATLAB——axis
- php通用注册界面代码