首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

黑马软件工程师——银行调度系统

2013-02-06 
黑马程序员——银行调度系统????System.out.println(windowName + 开始准备获取任务!)????Integer servic

黑马程序员——银行调度系统
????System.out.println(windowName + "开始准备获取任务!");
????Integer serviceNum = NumberMachine.getInstance()
??????.getCommonManager().fetchServiceNumber();
????if (serviceNum != null) {
?????System.out.println(windowName + "开始为第" + serviceNum
???????+ "号vip客户服务");

?????long startTime = System.currentTimeMillis();
?????int randomTime = Constants.MAX_SERVICE_TIME
???????- Constants.MIN_SERVICE_TIME;
?????long serviceTime = new Random().nextInt(randomTime) + 1
???????+ Constants.MIN_SERVICE_TIME;
?????try {
??????Thread.sleep(serviceTime);
?????} catch (InterruptedException e) {
??????e.printStackTrace();
?????}
?????long costTime = System.currentTimeMillis() - startTime;

?????System.out.println(windowName + "窗口完成第" + number
???????+ "号快速vip的服务,共耗时" + costTime / 1000 + "秒");
????} else {
?????System.out.println(windowName + "没有取得vip任务");
?????commonService();
????}
???}

???private void expressService() {
????String windowName = "第" + number + "号" + type + "窗口";
????System.out.println(windowName + "开始准备获取任务!");
????Integer serviceNum = NumberMachine.getInstance()
??????.getCommonManager().fetchServiceNumber();
????if (serviceNum != null) {
?????System.out.println(windowName + "开始为第" + serviceNum
???????+ "号快速客户服务");

?????long startTime = System.currentTimeMillis();
?????int randomTime = Constants.MAX_SERVICE_TIME
???????- Constants.MIN_SERVICE_TIME;
?????long serviceTime = new Random().nextInt(randomTime) + 1
???????+ Constants.MIN_SERVICE_TIME;
?????try {
??????Thread.sleep(serviceTime);
?????} catch (InterruptedException e) {
??????e.printStackTrace();
?????}
?????long costTime = System.currentTimeMillis() - startTime;

?????System.out.println(windowName + "窗口完成第" + number
???????+ "号快速用户的服务,共耗时" + costTime / 1000 + "秒");
????} else {
?????System.out.println(windowName + "没有取得快速任务");
?????commonService();
????}

???}

???private void commonService() {
????String windowName = "第" + number + "号" + type + "窗口";
????System.out.println(windowName + "开始准备获取任务!");
????Integer serviceNum = NumberMachine.getInstance()
??????.getCommonManager().fetchServiceNumber();
????if (serviceNum != null) {
?????System.out.println(windowName + "开始为第" + serviceNum
???????+ "号普通客户服务");

?????long startTime = System.currentTimeMillis();
?????int randomTime = Constants.MAX_SERVICE_TIME
???????- Constants.MIN_SERVICE_TIME;
?????long serviceTime = new Random().nextInt(randomTime) + 1
???????+ Constants.MIN_SERVICE_TIME;
?????try {
??????Thread.sleep(serviceTime);
?????} catch (InterruptedException e) {
??????e.printStackTrace();
?????}
?????long costTime = System.currentTimeMillis() - startTime;

?????System.out.println(windowName + "窗口完成第" + number
???????+ "号普通用户的服务,共耗时" + costTime / 1000 + "秒");
????} else {
?????System.out.println(windowName + "没有取得普通任务,空闲1秒");
?????try {
??????Thread.sleep(1000);
?????} catch (InterruptedException e) {
??????e.printStackTrace();
?????}
????}

???}

??});
?}

}
创建测试类包含用户的取号。

package cn.itheima.interview.bank;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class MainClass {

?public static void main(String[] args) {
??// 产生4个普通用户
??for (int i = 1; i < 5; i++) {
???ServiceWindow commonWindow = new ServiceWindow();
???commonWindow.setType(CustomerType.COMMON);
???commonWindow.setWindowId(i);
???commonWindow.start();
??}
??// 产生1个快速用户
??ServiceWindow expressWindow = new ServiceWindow();
??expressWindow.setType(CustomerType.EXPRESS);
??expressWindow.setWindowId(1);
??expressWindow.start();
??// 产生1个vip用户
??ServiceWindow vipWindow = new ServiceWindow();
??vipWindow.setType(CustomerType.EXPRESS);
??vipWindow.setWindowId(1);
??vipWindow.start();

??// 普通客户拿号
??Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
???public void run() {
????Integer serviceNumber = NumberMachine.getInstance()
??????.getCommonManager().generateNumber();
????/**
???? * 采用logger方式,无法看到直观的运行效果,因为logger.log方法内部并不是直接把内容打印出出来,
???? * 而是交给内部的一个线程去处理,所以,打印出来的结果在时间顺序上看起来很混乱。
???? */
????// logger.info("第" + serviceNumber + "号普通客户正在等待服务!");
????System.out.println("第" + serviceNumber + "号普通客户正在等待服务!");
???}
??}, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME, TimeUnit.SECONDS);

??// 快速客户拿号
??Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
???public void run() {
????Integer serviceNumber = NumberMachine.getInstance()
??????.getExpressManager().generateNumber();
????System.out.println("第" + serviceNumber + "号快速客户正在等待服务!");
???}
??}, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME * 2, TimeUnit.SECONDS);

??// VIP客户拿号
??Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
???public void run() {
????Integer serviceNumber = NumberMachine.getInstance()
??????.getVipManager().generateNumber();
????System.out.println("第" + serviceNumber + "号VIP客户正在等待服务!");
???}
??}, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME * 6, TimeUnit.SECONDS);
?}
}

热点排行