黑马程序员------银行业务调度系统(2)
来源:互联网 发布:wifi监控摄像头软件 编辑:程序博客网 时间:2024/04/29 07:35
---------------------- Android 培训、java 培训 、期待与您交流! ----------------------
银行业务调度系统
=================================================
//CustomerType
package com.itcast.study.Bank;
public enum CustomerType {
COMMON,EXPRESS,VIP; //定义的3种客户
public String toString(){
String name = null;
switch(this){
case COMMON:
name = "普通";
break;
case EXPRESS:
name = "快速";
break;
case VIP:
name = name();
break;
}
return name;
}
}
=================================================
//Constants
package com.itcast.study.Bank;
public class Constants {
public static int MAX_SERVICE_TIME = 10000; //10秒
public static int MIN_SERVICE_TIME = 1000; //1秒
/*1秒钟产生一个普通客户*/
public static int COMMON_CUSTOMER_INTERVAL_TIME = 1;
}
==================================================
//NumberManager
package com.itcast.study.Bank;
import java.util.ArrayList;
import java.util.List;
public class NumberManager {
private int lastNumber = 0;
private List queueNumbers = new ArrayList();
//客户取号
public synchronized Integer generateNewNumber(){
queueNumbers.add(++lastNumber);
return lastNumber;
}
//窗口叫号
public synchronized Integer fetchNumber(){
if(queueNumbers.size()>0){
return (Integer)queueNumbers.remove(0);
}else{
return null;
}
}
}
===================================================
//NumberMachine
package com.itcast.study.Bank;
public class NumberMachine {
//用单例模式来管理号码管理器。
private NumberMachine(){}
private static NumberMachine instance = new NumberMachine();
public static NumberMachine getInstance(){
return instance;
}
private NumberManager commonManager = new NumberManager();//创建一个普通号码管理器
private NumberManager expressManager = new NumberManager();//创建一个快速号码管理器
private NumberManager vipManager = new NumberManager();//创建一个VIP号码管理器
//对外提供一个访问的方法。
public NumberManager getCommonManager() {
return commonManager;
}
public NumberManager getExpressManager() {
return expressManager;
}
public NumberManager getVipManager() {
return vipManager;
}
}
=================================================
//ServiceWindow
package com.itcast.study.Bank;
import java.util.Random;
import java.util.concurrent.Executors;
public class ServiceWindow {
private CustomerType type = CustomerType.COMMON;//窗口类型,默认是普通窗口
private int number = 1;//窗口号默认值为1号
public CustomerType getType() {
return type;
}
public void setType(CustomerType type) {
this.type = type;
}
public void setNumber(int number) {
this.number = number;
}
public void start() {
//创建一个线程池来执行
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
while (true) {
switch (type) {
case COMMON:
commonService();
break;
case EXPRESS:
expressService();
break;
case VIP:
vipService();
break;
}
}
}
});
}
//普通窗口为客户服务
private void commonService() {
String windowName = "第" + number + "号" + type + "窗口";
System.out.println(windowName + "正在获取服务任务");
Integer serviceNumber = NumberMachine.getInstance().getCommonManager()
.fetchNumber();
if (serviceNumber != null) {
System.out.println(windowName + "正在为第" + serviceNumber + "号客户服务");
int maxRandom = Constants.MAX_SERVICE_TIME
- Constants.MIN_SERVICE_TIME;
int serviceTime = new Random().nextInt(maxRandom) + 1
+ Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(windowName + "为第" + serviceNumber + "号客户服务,耗时:"
+ serviceTime / 1000 + "秒");
} else {
System.out.println(windowName + "没有取到服务任务");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//快速窗口为客户服务
private void expressService() {
Integer serviceNumber = NumberMachine.getInstance().getExpressManager()
.fetchNumber();
String windowName = "第" + number + "号" + type + "窗口";
System.out.println(windowName + "");
if (serviceNumber != null) {
System.out.println(windowName + "正在为第" + serviceNumber + "号客户服务");
int serviceTime = Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(windowName + "为第" + serviceNumber + "号客户服务,耗时:"
+ serviceTime / 1000 + "秒");
} else {
System.out.println(windowName + "没有取到服务任务");
commonService();
}
}
//VIP窗口为客户服务
private void vipService() {
Integer serviceNumber = NumberMachine.getInstance().getVipManager()
.fetchNumber();
String windowName = "第" + number + "号" + type + "窗口";
System.out.println(windowName + "");
if (serviceNumber != null) {
System.out.println(windowName + "正在为第" + serviceNumber + "号客户服务");
int maxRandom = Constants.MAX_SERVICE_TIME
- Constants.MIN_SERVICE_TIME;
int serviceTime = new Random().nextInt(maxRandom) + 1
+ Constants.MIN_SERVICE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(windowName + "为第" + serviceNumber + "号客户服务,耗时:"
+ serviceTime / 1000 + "秒");
} else {
System.out.println(windowName + "没有取到服务任务");
commonService();
}
}
}
=================================================
//MainClass
package com.itcast.study.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 window = new ServiceWindow();
window.setNumber(i);
window.start();
}
// 创建一个快速窗口
ServiceWindow expressWindow = new ServiceWindow();
expressWindow.setType(CustomerType.EXPRESS);
expressWindow.start();
// 创建一个VIP窗口
ServiceWindow vipWindow = new ServiceWindow();
vipWindow.setType(CustomerType.VIP);
vipWindow.start();
// 普通客户取号
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {
public void run() {
Integer serviceNumber = NumberMachine.getInstance()
.getCommonManager().generateNewNumber();
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().generateNewNumber();
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().generateNewNumber();
System.out.println("第" + serviceNumber + "号vip客户等待服务");
}
}, 0, Constants.COMMON_CUSTOMER_INTERVAL_TIME * 6, TimeUnit.SECONDS);
}
}
---------------------- Android 培训、java 培训 、期待与您交流! ----------------------
- 黑马程序员------银行业务调度系统(2)
- 黑马程序员2--银行业务调度系统
- 黑马程序员(11)银行业务调度系统
- loading黑马程序员之银行业务调度系统(5-2)
- 黑马程序员--面试题(2)银行业务调度系统
- 黑马程序员---银行业务调度系统
- <黑马程序员>银行业务调度系统
- 【黑马程序员】银行业务调度系统
- 黑马程序员--银行业务调度系统
- 《黑马程序员》 银行业务调度系统
- 黑马程序员-----银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员 银行业务调度系统
- 黑马程序员-------银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员-银行业务调度系统
- 黑马程序员-银行业务调度系统
- 黑马程序员-----银行业务调度系统
- SQL Server 2005使用基于行版本控制的隔离级别初探 .
- android crash debug
- 我QTCreater快捷键的配置文件
- 监视系统活动(sar)
- MCI函数与命令
- 黑马程序员------银行业务调度系统(2)
- 构造函数 虚函数 虚析构函数
- SQL利用Case When Then多条件判断
- javascript面向对象!~
- 输入整数的字符串,输出相应的整数
- java frame
- 在一个事务中,hibernate的查询数据,不要在set值,比如:密码解密,否则会重新更新到数据库中
- Actor模型
- 读写ini