.println(windowType.toString() + "窗口" + windowId + "没有任务");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void vipServer(WindowType windowType) {
// 取出号码
Integer number = NumberMachine.getInstance().getVipManager()
.fetchNumber();
System.out.println(windowType.toString() + "窗口" + windowId + "正在获取任务");
if (number != null) {
System.out.println(windowType.toString() + "窗口" + windowId + "开始为"
+ number + "号普通客户服务");
long beginServer = System.currentTimeMillis();
int difference = Constants.MAX_SERVER_TIME
- Constants.MIN_SERVER_TIME;
int millis = ((new Random().nextInt(difference) + 1) + Constants.MIN_SERVER_TIME);
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
long endServer = System.currentTimeMillis();
System.out.println(windowType.toString() + "窗口" + windowId + "为"
+ number + "号普通客户结束服务,耗时" + (endServer - beginServer)
/ 1000 + "秒");
} else {
System.out
.println(windowType.toString() + "窗口" + windowId + "没有任务");
commonServer(windowType);
}
}
public void quickServer(WindowType windowType) {
// 取出号码
Integer number = NumberMachine.getInstance().getQuickManager()
.fetchNumber();
System.out.println(windowType.toString() + "窗口" + windowId + "正在获取任务");
if (number != null) {
System.out.println(windowType.toString() + "窗口" + windowId + "开始为"
+ number + "号" + windowType + "客户服务");
long beginServer = System.currentTimeMillis();
int difference = Constants.MAX_SERVER_TIME
- Constants.MIN_SERVER_TIME;
int millis = ((new Random().nextInt(difference) + 1) + Constants.MIN_SERVER_TIME);
try {
Thread.sleep(millis);
} catch (InterruptedException e) {
e.printStackTrace();
}
long endServer = System.currentTimeMillis();
System.out.println(windowType.toString() + "窗口" + windowId + "为"
+ number + "号" + windowType + "客户结束服务,耗时"
+ (endServer - beginServer) / 1000 + "秒");
} else {
System.out
.println(windowType.toString() + "窗口" + windowId + "没有任务");
commonServer(windowType);
}
}
public void start() {
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
while (true) {
switch (windowType) {
case COMMON:
commonServer(WindowType.COMMON);
break;
case QUICK:
quickServer(WindowType.QUICK);
break;
case VIP:
vipServer(WindowType.VIP);
break;
}
}
}
});
}
}
package cn.itcast.Bank;
/*
* 窗口类型的枚举
*
*/
public enum WindowType {
COMMON, QUICK, VIP;
public String toString() {
switch (this) {
case COMMON:
return "普通";
case QUICK:
return "快速";
case VIP:
return "VIP";
}
return null;
};
}
package cn.itcast.Bank;
/*
* 常量类
*
*/
public class Constants {
public static final int MAX_SERVER_TIME = 10000;
public static final int MIN_SERVER_TIME = 1000;
}
package cn.itcast.Bank;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/*
* 银行叫号系统测试类
*
*/
public class BankTest {
public static void main(String args[]) {
// 创建四个普通窗口
for (int i = 1; i < 5; i++) {
new Window(i, WindowType.COMMON).start();
;
}
// 创建一个快速窗口
new Window(5, WindowType.QUICK).start();
// 创建一个VIP窗口
new Window(6, WindowType.VIP).start();
/* 根据普通客户与快速客户及VIP客户的6:2:1的比例生成客户 */
// 生成普通客户
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
int currentNumber = NumberMachine.getInstance()
.getCommonManager().generateNewManager();
System.out.println("第" + currentNumber + "号普通客户等待服务");
}
}, 0, 1, TimeUnit.SECONDS);
// 生成快速客户
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
int currentNumber = NumberMachine.getInstance()
.getQuickManager().generateNewManager();
System.out.println("第" + currentNumber + "号快速客户等待服务");
}
}, 0, 2, TimeUnit.SECONDS);
// 生成VIP客户
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
int currentNumber = NumberMachine.getInstance().getVipManager()
.generateNewManager();
System.out.println("第" + currentNumber + "号VIP客户等待服务");
}
}, 0, 6, TimeUnit.SECONDS);
}
}
从学习这两个项目中,