黑马程序员 银行业务调度系统
来源:互联网 发布:美工刀片哪个牌子最好 编辑:程序博客网 时间:2024/04/30 12:34
package com.tiheima.bank;
import java.util.ArrayList;
import java.util.List;public class NumberManager {
private int lastNumber = 1;
private List<Integer> queueNumber =new ArrayList<Integer>();
public synchronized Integer generateNewNumber(){
queueNumber.add(lastNumber);
return lastNumber++;
}
public synchronized Integer fecthServiceNumber(){
Integer number = null;
if(queueNumber.size()>0)
number = queueNumber.remove(0);
return number;
}}
2,定义一个NumberMachine类 做为取号机管理三个号码管理器 设计为单例模式
属性(分别为三个类型的号码管理器):NumberManager commonManager
NumberManager expressManager
NumberManager vipManager
方法:三个getter方法分别获得三个类型的号码管理器
代码实现:
package com.tiheima.bank;
public class NumberMachine {
private NumberManager commonManager = new NumberManager();
private NumberManager expressManager = new NumberManager();
private NumberManager vipManager = new NumberManager();
public NumberManager getCommonManager() {
return commonManager;
}
public NumberManager getExpressManager() {
return expressManager;
}
public NumberManager getVipManager() {
return vipManager;
}
private NumberMachine(){};
public static NumberMachine getNumberchine(){
return instance;
}
private static NumberMachine instance = new NumberMachine();
}
3,设计一个ServiceWindow类,作为窗口
属性:CustomerType type 窗口类型
int windowId 窗口编号
方法:start() 内建一个线程,根据窗口类型循环调用窗口服务方法
三个窗口服务方法分别用于普通,快速,vip窗口
代码实现:
package com.tiheima.bank;
import java.util.Random;
import java.util.concurrent.Executors;public class ServiceWindow {
private CustomerType type = CustomerType.COMMON;
private int windowId = 1;
public void setType(CustomerType type) {
this.type = type;
}
public void setWindowId(int windowId) {
this.windowId = windowId;
}
public void start(){
Executors.newSingleThreadExecutor().execute(
new Runnable(){
public void run(){
while(true){
switch(type){
case COMMON:
commomService();
break;
case EXPRESS:
expressService();
break;
case VIP:
vipService();
break;
}
}
}
}
);
}
private void commomService(){
String windowName = "第"+windowId+"号"+type+"窗口";
System.out.println(windowName+"正在获取普通任务");
Integer serviceNumber = NumberMachine.getNumberchine().getCommonManager().fecthServiceNumber();
if(serviceNumber!=null){
System.out.println(windowName+"开始为第"+serviceNumber+"号普通客户服务");
int maxRandomTime = Constants.MAX_SERVICE_TIME-Constants.MIN_SERIVCE_TIME;
int serviceTime = new Random().nextInt(maxRandomTime)+1+Constants.MIN_SERIVCE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(windowName+"完成为第"+serviceNumber+"号普通客户的服务,耗时"+serviceTime/1000+"秒");
}else{
System.out.println(windowName+"没有获取到任务,正在空闲一秒");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void expressService(){
String windowName = "第"+windowId+"号"+type+"窗口";
System.out.println(windowName+"正在获取快速任务");
Integer serviceNumber = NumberMachine.getNumberchine().getExpressManager().fecthServiceNumber();
if(serviceNumber!=null){
System.out.println(windowName+"开始为第"+serviceNumber+"号快速客户服务");
int serviceTime =Constants.MIN_SERIVCE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(windowName+"完成为第"+serviceNumber+"快速客户的服务,耗时"+serviceTime/1000+"秒");
}else{
System.out.println(windowName+"没有获取到快速任务");
commomService();
}
}
private void vipService(){
String windowName = "第"+windowId+"号"+type+"窗口";
System.out.println(windowName+"正在获取VIP任务");
Integer serviceNumber = NumberMachine.getNumberchine().getVipManager().fecthServiceNumber();
if(serviceNumber!=null){
System.out.println(windowName+"开始为第"+serviceNumber+"号VIP客户服务");
int maxRandomTime = Constants.MAX_SERVICE_TIME-Constants.MIN_SERIVCE_TIME;
int serviceTime = new Random().nextInt(maxRandomTime)+1+Constants.MIN_SERIVCE_TIME;
try {
Thread.sleep(serviceTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(windowName+"完成为第"+serviceNumber+"VIP客户的服务,耗时"+serviceTime/1000+"秒");
}else{
System.out.println(windowName+"没有获取到VIP任务");
commomService();
}
}
}
4,设计一个MainClass类 创建6个窗口 创建3个定时器定时创建3种客户号码 运行程序
代码实现:
package com.tiheima.bank;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
for (int i = 1; i < 5; i++) {
ServiceWindow window = new ServiceWindow();
window.setWindowId(i);
window.start();
}
ServiceWindow expressWindow = new ServiceWindow();
expressWindow.setType(CustomerType.EXPRESS);
expressWindow.start();
ServiceWindow vipWindow = new ServiceWindow();
vipWindow.setType(CustomerType.VIP);
vipWindow.start();
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable(){
public void run(){
Integer serviceNumber = NumberMachine.getNumberchine().getCommonManager().generateNewNumber();
System.out.println("第"+serviceNumber+"号普通客户正在等待服务");
}
},
0,
Constants.COMMON_TIME,
TimeUnit.SECONDS);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable(){
public void run(){
Integer serviceNumber = NumberMachine.getNumberchine().getExpressManager().generateNewNumber();
System.out.println("第"+serviceNumber+"号快速客户正在等待服务");
}
},
0,
Constants.COMMON_TIME*2,
TimeUnit.SECONDS);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable(){
public void run(){
Integer serviceNumber = NumberMachine.getNumberchine().getVipManager().generateNewNumber();
System.out.println("第"+serviceNumber+"号VIP客户正在等待服务");
}
},
0,
Constants.COMMON_TIME*6,
TimeUnit.SECONDS);}
}
- 黑马程序员---银行业务调度系统
- <黑马程序员>银行业务调度系统
- 【黑马程序员】银行业务调度系统
- 黑马程序员--银行业务调度系统
- 《黑马程序员》 银行业务调度系统
- 黑马程序员-----银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员 银行业务调度系统
- 黑马程序员-------银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员-银行业务调度系统
- 黑马程序员-银行业务调度系统
- 黑马程序员-----银行业务调度系统
- 黑马程序员-银行业务调度系统
- 黑马程序员---银行业务调度系统
- 黑马程序员--银行业务调度系统
- 黑马程序员---银行业务调度系统
- 黑马程序员-----银行业务调度系统
- 《C#中get、set的用法》
- 移动游戏中发短信收费(增值服务)的注意事项
- jQuery读写复选框,文本框,单选框,textarea,img
- ALSA and TinyAlsa
- linux替换文件名
- 黑马程序员 银行业务调度系统
- ios推送
- GiraffeOS
- javascript中函数重载的问题
- 片选
- linux替换目录内的内容
- ORA-04061:/ORA-06508:
- c# int[] 和string[] 之间的相互转换
- unity3d中让某个物体透明