`
learen
  • 浏览: 11154 次
  • 性别: 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客户正在等待服务!

 

分享到:
评论

相关推荐

    02-7K月薪面试题破解之二_银行业务调度系统视频教程

    02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-7K月薪面试题破解之二_银行业务调度系统视频教程 02-...

    银行业务调度系统

    【银行业务调度系统】 在IT领域,银行业务调度系统是一个至关重要的组成部分,它负责管理和优化银行内部的各项业务流程,确保高效、稳定且安全地运行。此类系统通常涉及到多个子系统和模块,包括任务调度、资源分配...

    银行业务调度系统分析

    银行业务调度系统是金融机构核心系统的重要组成部分,它负责协调并管理银行的各种业务操作,确保高效、稳定、安全地处理大量交易。在这个系统中,多线程技术的应用是至关重要的,因为它能够实现并发处理,提高系统...

    张孝祥银行业务调度系统源代码

    总的来说,【张孝祥银行业务调度系统源代码】是一个宝贵的教育资源,对于想要深入理解银行业务处理和系统开发的程序员来说,提供了实战性的学习素材。通过研究和实践,可以提升对银行业务流程的理解,掌握系统设计和...

    张孝祥银行业务调度系统源代码 第二次写 复习

    张孝祥的【银行业务调度系统源代码】则提供了对此类系统的一种实现,通过复习和改进,优化了服务方法,提升了系统的灵活性和实用性。 在描述中,我们看到开发者在时隔两天后再次回顾和编写这部分代码,这是为了检验...

    银行业务调度系统的实现

    在IT行业中,银行业务调度系统是金融机构核心技术基础设施的一部分,它负责高效、稳定地处理大量复杂的业务请求。这篇博文“银行业务调度系统的实现”探讨了如何设计并实施这样的系统,以优化银行的服务质量和效率。...

    软通动力面试题——银行业务调度系统

    "软通动力面试题——银行业务调度系统" 在本篇文章中,我们将对软通动力的银行业务调度系统面试题进行详细的分析和解释。该系统模拟了银行业务调度系统的逻辑,涵盖了客户分类、窗口管理、业务办理时间等多个方面。...

    张孝祥银行业务调度系统

    张孝祥银行业务调度系统由赤霄扬天上传。看好程序,看优秀代码,写出自己的优秀代码。

    银行业务调度系统图形版

    银行业务调度系统图形版是一个专为金融机构设计的高级软件系统,它通过图形用户界面(GUI)提供直观且高效的业务操作和管理。GUI编程是该系统的核心组成部分,它使得银行员工和管理者能够通过易于理解的图形元素,如...

    银行业务调度系统需求及面试题及代码

    银行业务调度系统是一种关键的IT解决方案,主要用于优化银行内部的工作流程,提高服务效率,并确保业务操作的顺畅进行。本资源包含三个主要部分:银行业务调度系统的需求分析、面试题库以及实际的系统实现代码。 ...

    银行业务调度系统模拟

    在银行业务调度系统模拟中,我们探讨的核心是一个高效、安全且可靠的系统,它能够处理银行日常的事务操作,包括存款、取款、转账等。这个系统是基于Java编程语言实现的,利用其强大的面向对象特性以及丰富的库支持,...

    黑马程序员--银行管理系统

    模拟实现银行业务调度系统逻辑,具体需求如下: 1.银行内有6个业务窗口,1 - 4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口。 2.有三种对应类型的客户:VIP客户,普通客户,快速客户(办理如交水电费、...

    银行调度系统样例代码

    黑马程序员银行调度系统样例代码,共有3个主要类,2个辅助类,一个运行实例类,分别为: 1.3个主要类 NumberMachine,取号码器 NumberManager,号码管理器 ServiceWindow,业务窗口 2个辅助类 Constants,常量池 ...

    张孝祥银行业务调度系统笔记

    ### 张孝祥银行业务调度系统笔记:面试题解析与设计思路 银行业务调度系统是银行内部用于管理和调度不同类型的客户及其所办理业务的一种高效机制。本笔记将深入解析题目中提到的银行业务调度系统的设计思路,包括...

    【IT教程网】银行业务调度系统教程_源码与PPT_it_银行_银行管理系统_

    在本教程中,我们将深入探讨“银行业务调度系统”,这是一个重要的IT应用,特别是在现代金融机构中。这个系统的主要目标是优化银行窗口服务流程,提高效率,减少客户等待时间,提升客户满意度。通过学习这个教程,你...

    银行业务调度系统源代码

    本视频讲解的内容为《银行业务调度系统》,这道做出来就给7k月薪的面试题。

Global site tag (gtag.js) - Google Analytics