`
learen
  • 浏览: 10654 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

黑马程序员 改进版银行业务调度系统

阅读更多

     ------- android培训java培训、期待与您交流! ----------

    我在原有代码的基础上进行了一下改进,增加了Controller类 

public class Controller {
	private static final int CUSTOMER_FETCH = 1;
	private ScheduledExecutorService sch = Executors.newScheduledThreadPool(3);
	
	public Controller() {
		ServiceWindow.普通1.service();
		ServiceWindow.普通2.service();
		ServiceWindow.普通3.service();
		ServiceWindow.普通4.service();
		ServiceWindow.快速.service();
		ServiceWindow.VIP.service();
	}

	public void schedule() {
		// 普通客户
		sch.scheduleAtFixedRate(new Runnable() {

			@Override
			public void run() {
				synchronized(this){
					Integer serviceNumber = NumberGenerator.common.generalNewNumber();
					System.out.println("第" + serviceNumber + "号普通客户正在等待服务!");
				}
			}
		}, 0, CUSTOMER_FETCH, TimeUnit.SECONDS);
		// 快速客户
		sch.scheduleAtFixedRate(new Runnable() {

			@Override
			public void run() {
				synchronized(this){
					Integer serviceNumber = NumberGenerator.express.generalNewNumber();
					System.out.println("第" + serviceNumber + "号快速客户正在等待服务!");
				}
			}
		}, 0, CUSTOMER_FETCH * 2, TimeUnit.SECONDS);
		// vip客户
		sch.scheduleAtFixedRate(new Runnable() {

			@Override
			public void run() {
				synchronized(this){
					Integer serviceNumber = NumberGenerator.vip.generalNewNumber();
					System.out.println("第" + serviceNumber + "号VIP客户正在等待服务!");
				}
			}
		}, 0, CUSTOMER_FETCH * 6, TimeUnit.SECONDS);
	}
}

    调用方法

public class Run {

	public static void main(String[] args) {

		new Controller().schedule();
	}
}

    ServiceWindow类采用枚举进行重写

public enum ServiceWindow {
	普通1("普通", 1), 普通2("普通", 2), 普通3("普通", 3), 普通4("普通", 4), 快速(
			"快速", 5), VIP("VIP", 6);
	private static final int MAX = 10;
	private static final int MIN = 1;
	private String type;
	private int id;
	String windowName = this.name();
	private ExecutorService pool;

	public int getId() {
		return id;
	}

	private ServiceWindow(String type, int id) {
		this.type = type;
		this.id = id;
		pool = Executors.newSingleThreadExecutor();
	}

	public void service() {
		pool.execute(new Runnable() {
			@Override
			public void run() {
				while (true) {
					switch (type) {
					case "普通":
						commonService();
						break;
					case "快速":
						expressService();
						break;
					case "VIP":
						vipService();
						break;
					}
				}
			}
		});

	}
 
	private synchronized void vipService() {
		Integer customerNum = NumberGenerator.vip.fetchNumber();
		if (customerNum != 0) {
			System.out.println(id + "号" + type + "窗口开始为" + customerNum + "号vip客户服务");
			int serviceTime = new Random().nextInt(MAX - MIN) + 1 + MIN;
			try {
				Thread.sleep(serviceTime * 1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(id + "号" + type + "窗口完成为第" + customerNum
					+ "号vip客户服务,总共耗时" + serviceTime + "秒");
		} else {
			System.out.println(windowName + "没有取到vip任务");
			commonService();
		}
	}

	private synchronized void expressService() {
		Integer customerNum = NumberGenerator.express.fetchNumber();
		if (customerNum != 0) {
			System.out.println(id + "号" + type + "窗口开始为" + customerNum + "号快速客户服务");
			int serviceTime = MIN;
			try {
				Thread.sleep(serviceTime * 1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(id + "号" + type + "窗口完成为第" + customerNum
					+ "号快速客户服务,总共耗时" + serviceTime + "秒");
		} else {
			System.out.println(windowName + "没有取到快速任务");
			commonService();
		}

	}

	private synchronized void commonService() {
		int customerNum = NumberGenerator.common.fetchNumber();
		if (customerNum != 0) {
			System.out.println(id + "号" + type + "窗口开始为" + customerNum + "号普通客户服务");
			int serviceTime = new Random().nextInt(MAX - MIN) + 1 + MIN;
			try {
				Thread.sleep(serviceTime * 1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			System.out.println(id + "号" + type + "窗口完成为第" + customerNum
					+ "号普通客户服务,总共耗时" + serviceTime + "秒");
		} else {
			System.out.println(windowName + "没有取到普通任务,正在空闲一秒");
			try {
				Thread.sleep(1000);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

    排号生成器也用枚举重写

public enum NumberGenerator {
	common,express,vip;
	private int num = 0;
	private LinkedList<Integer> list = new LinkedList<>();

	public int generalNewNumber() {
		synchronized(this){
			list.addLast(++num);
		}
		return num;
	}

	public int fetchNumber() {
		if (list.size() > 0)
			synchronized(list){
				return list.removeFirst();
			}
		else
			return 0;
	}
}

    执行结果

普通1没有取到普通任务,正在空闲一秒
普通3没有取到普通任务,正在空闲一秒
快速没有取到快速任务
快速没有取到普通任务,正在空闲一秒
第1号普通客户正在等待服务!
2号普通窗口开始为1号普通客户服务
VIP没有取到vip任务
VIP没有取到普通任务,正在空闲一秒
普通4没有取到普通任务,正在空闲一秒
第1号快速客户正在等待服务!
第1号VIP客户正在等待服务!
第2号普通客户正在等待服务!
1号普通窗口开始为2号普通客户服务
5号快速窗口开始为1号快速客户服务
普通3没有取到普通任务,正在空闲一秒
普通4没有取到普通任务,正在空闲一秒
6号VIP窗口开始为1号vip客户服务
第3号普通客户正在等待服务!
5号快速窗口完成为第1号快速客户服务,总共耗时1秒
快速没有取到快速任务
3号普通窗口开始为3号普通客户服务
快速没有取到普通任务,正在空闲一秒
普通4没有取到普通任务,正在空闲一秒
第2号快速客户正在等待服务!
第4号普通客户正在等待服务!
5号快速窗口开始为2号快速客户服务
4号普通窗口开始为4号普通客户服务
第5号普通客户正在等待服务!
3号普通窗口完成为第3号普通客户服务,总共耗时2秒
3号普通窗口开始为5号普通客户服务
5号快速窗口完成为第2号快速客户服务,总共耗时1秒
快速没有取到快速任务
快速没有取到普通任务,正在空闲一秒
第3号快速客户正在等待服务!
第6号普通客户正在等待服务!
1号普通窗口完成为第2号普通客户服务,总共耗时4秒
2号普通窗口完成为第1号普通客户服务,总共耗时5秒
1号普通窗口开始为6号普通客户服务
普通2没有取到普通任务,正在空闲一秒
5号快速窗口开始为3号快速客户服务
6号VIP窗口完成为第1号vip客户服务,总共耗时4秒
VIP没有取到vip任务
VIP没有取到普通任务,正在空闲一秒
第7号普通客户正在等待服务!
2号普通窗口开始为7号普通客户服务
5号快速窗口完成为第3号快速客户服务,总共耗时1秒
快速没有取到快速任务
快速没有取到普通任务,正在空闲一秒
VIP没有取到vip任务
VIP没有取到普通任务,正在空闲一秒
第4号快速客户正在等待服务!
第2号VIP客户正在等待服务!
第8号普通客户正在等待服务!
3号普通窗口完成为第5号普通客户服务,总共耗时3秒
3号普通窗口开始为8号普通客户服务
5号快速窗口开始为4号快速客户服务
6号VIP窗口开始为2号vip客户服务
第9号普通客户正在等待服务!
1号普通窗口完成为第6号普通客户服务,总共耗时3秒
1号普通窗口开始为9号普通客户服务
5号快速窗口完成为第4号快速客户服务,总共耗时1秒
快速没有取到快速任务
快速没有取到普通任务,正在空闲一秒
第5号快速客户正在等待服务!
第10号普通客户正在等待服务!
5号快速窗口开始为5号快速客户服务
6号VIP窗口完成为第2号vip客户服务,总共耗时2秒
VIP没有取到vip任务
6号VIP窗口开始为10号普通客户服务
第11号普通客户正在等待服务!
4号普通窗口完成为第4号普通客户服务,总共耗时7秒
5号快速窗口完成为第5号快速客户服务,总共耗时1秒
快速没有取到快速任务
5号快速窗口开始为11号普通客户服务
普通4没有取到普通任务,正在空闲一秒
第6号快速客户正在等待服务!
第12号普通客户正在等待服务!
4号普通窗口开始为12号普通客户服务
第13号普通客户正在等待服务!
第7号快速客户正在等待服务!
第3号VIP客户正在等待服务!

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics