package com.mth.bank;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
* 服务窗口
*
* */
public class ServiceWindow {
// 窗口的类型 三种 用枚举
private CustomerType type = CustomerType.COMMON;// 默认是普通窗口
private int windowId = 1;// 窗口号
public void setType(CustomerType type) {
this.type = type;
}
public CustomerType getType() {
return type;
}
public void setWindowId(int windowId) {
this.windowId = windowId;
}
public void start() {
// 线程
ExecutorService ser = Executors.newSingleThreadExecutor();
ser.execute(new Runnable() {
@Override
public void run() {
while (true) {
switch (type) {
case COMMON:
commonService();
break;
case EXPRESS:
expressService();
break;
case VIP:
vipService();
break;
}
}
}
});
}
private void commonService() {
String windowName = "第" + windowId + "号" + type + "窗口";
// 获取普通用户集合队列中的第一个元素
Integer number = NumberMachine.getInstance().getCommManager()
.fetchServiceNumber();
System.out.println(windowName + "正在获取任务");
if (number != null) {// 开始服务
System.out.println(windowName + "正在为,第" + number + "个普通客户服务!");
long beginTime = System.currentTimeMillis();
int maxRandom = Constants.MAX_SERVICE_TIME
- Constants.MIN_SERVICE_TIME;
// (0-9000)+1000=1000~10000 (1秒到10秒)
int serviceTime = new Random().nextInt(maxRandom) + 1
+ Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
long elapsedTime = (endTime - beginTime) / 1000;// 单位是秒
System.out.println(windowName + "为第" + number + "个" + type
+ "客户完成服务,耗时" + elapsedTime + "秒");
} else {
// 普通用户队列中没有排队的 那么就休息一秒
System.out.println(windowName + "没有取到普通任务 ,先休息1秒");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void expressService() {
String windowName = "第" + windowId + "号" + type + "窗口";
// 获取普通用户集合队列中的第一个元素
Integer number = NumberMachine.getInstance().getExpressManager()
.fetchServiceNumber();
System.out.println(windowName + "正在获取任务");
if (number != null) {// 开始服务
System.out.println(windowName + "正在为,第" + number + "快速客户服务!");
long beginTime = System.currentTimeMillis();
int maxRandom = Constants.MAX_SERVICE_TIME
- Constants.MIN_SERVICE_TIME;
// (0-9000)+1000=1000~10000 (1秒到10秒)
int serviceTime = new Random().nextInt(maxRandom) + 1
+ Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
long elapsedTime = (endTime - beginTime) / 1000;// 单位是秒
System.out.println(windowName + "为第" + number + "个" + type
+ "客户完成服务,耗时" + elapsedTime + "秒");
} else {
System.out.println(windowName + "没有取到快速任务");
commonService();
}
}
private void vipService() {
String windowName = "第" + windowId + "号" + type + "窗口";
// 获取普通用户集合队列中的第一个元素
Integer number = NumberMachine.getInstance().getVipManager()
.fetchServiceNumber();
System.out.println(windowName + "正在获取任务");
if (number != null) {// 开始服务
System.out.println(windowName + "正在为,第" + number + "VIP客户服务!");
long beginTime = System.currentTimeMillis();
int maxRandom = Constants.MAX_SERVICE_TIME
- Constants.MIN_SERVICE_TIME;
// (0-9000)+1000=1000~10000 (1秒到10秒)
int serviceTime = new Random().nextInt(maxRandom) + 1
+ Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
long elapsedTime = (endTime - beginTime) / 1000;// 单位是秒
System.out.println(windowName + "为第" + number + "个" + type
+ "客户完成服务,耗时" + elapsedTime + "秒");
} else {
System.out.println(windowName + "没有取到VIP任务");
commonService();
}
}
}
窗口服务类ServiceWindow
最新推荐文章于 2020-11-10 11:15:26 发布