同过银行调度系统,让我认识到做为一个程序员也是要好好体验生活的。
号码发生器:
import java.util.ArrayList;
import java.util.List;
/**
* 号码发生器
* @author 李见黎
*2012-3-25
*/
public class NumberManager {
private int lastNumber=1;
private List<Integer> queueList=new ArrayList<Integer>(); //面向接口编程
/**
* 多个涉及到了,就互斥,拆箱和装箱
* @return
*/
public synchronized Integer generateNewManager()
{
queueList.add(lastNumber); //加入队列
return lastNumber++;
}
/**
* 取号的方法
*/
public Integer fetchServiceNumber()
{
Integer numberInteger=null;
if(queueList.size()>0)
numberInteger = queueList.remove(0);
return numberInteger;
}
}
号码管理器:
/**
* 号码管理器
* @author 李见黎
*2012-3-25
*/
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 getInstance()
{
return instance;
}
private static NumberMachine instance=new NumberMachine();
}
主函数:
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
/**
* 主函数
* @author 李见黎
*2012-3-25
*/
public class Main {
/**
* @param 主函数
*/
public static void main(String[] args) {
for(int i=1;i<5;i++)
{
ServiceWin commonWin=new ServiceWin();
commonWin.setWindowID(i);
commonWin.Start();
}
ServiceWin ExpressWin=new ServiceWin();
ExpressWin.setTyper(CustomerTyper.EXPRESS);
ExpressWin.Start();
ServiceWin VIPWin=new ServiceWin();
VIPWin.setTyper(CustomerTyper.VIP);
VIPWin.Start();
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
Integer numInteger=NumberMachine.getInstance().getCommonManager().generateNewManager();
System.out.println(numInteger+"号普通客户来了");
}
},
0,
Constants.COMMON_CUSTOMER_INTERVAL_TIME,
TimeUnit.SECONDS);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
Integer numInteger=NumberMachine.getInstance().getVipManager().generateNewManager();
System.out.println(numInteger+"号VIP客户来了");
}
},
0,
Constants.COMMON_CUSTOMER_INTERVAL_TIME*6,
TimeUnit.SECONDS);
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
new Runnable() {
@Override
public void run() {
Integer numInteger=NumberMachine.getInstance().getVipManager().generateNewManager();
System.out.println(numInteger+"号快速户来了");
}
},
0,
Constants.COMMON_CUSTOMER_INTERVAL_TIME*2,
TimeUnit.SECONDS);
}
}