黑马程序员--java小项目之银行业务调度系统(二)

2014-11-24 02:31:26 · 作者: · 浏览: 5
.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);

	}
}

从学习这两个项目中,