您的位置:首页 > 职场人生

黑马程序员_银行调度业务系统

2013-03-24 17:10 447 查看
黑马程序员_银行调度业务系统
[align=center]------android培训java培训、期待与您交流!------[/align]

package cn.itcast.bank;

import java.util.ArrayList;

import java.util.List;

public class NumberManger {

private int lastNumber = 0;

private List<Integer> queueNumber = new ArrayList<Integer>();

public synchronized Integer generateNewManger(){

queueNumber.add(++lastNumber);

return lastNumber;

}

public synchronized Integer fetchServiveNumber(){

Integer number = null;

if(queueNumber.size()>0){

number = queueNumber.remove(0);

}

return number;

}

}

-----------------------------------------------------------------------------------------------------

package cn.itcast.bank;

public class NumberMachine {

private NumberMachine(){}
private static NumberMachine instance = new NumberMachine();
public static NumberMachine getInstance(){

return instance;
}

private NumberManger commonManager = new NumberManger();
private NumberManger expressManger = new NumberManger();
private NumberManger vipManger = new NumberManger();

public NumberManger getCommonManager() {

return commonManager;
}
public NumberManger getExpressManager() {

return expressManger;
}
public NumberManger getVipManager() {

return vipManger;
}

}

******************************************************************************************

package cn.itcast.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 比if else效率高

switch(type){

case COMMON:

commonService();

break;

case EXPRESS:

expressService();

break;

case VIP:

vipService();

break;

}

}

}

});
}
private void commonService() {

String windowName = "第"+windowId+"号"+ type+"窗口";

Integer number = NumberMachine.getInstance().getCommonManager().fetchServiveNumber();

System.out.println(windowName+"正在获取任务");

if(number !=null){

System.out.println(windowName+"为第"+number+"个"+"普通"+"客户服务");

long beginTime = System.currentTimeMillis();

int maxRand = Constans.MAX_SERVICE_TIME-Constans.MIN_SERVICE_TIME;

long serveTime = new Random().nextInt(maxRand)+1+Constans.MIN_SERVICE_TIME;

try {

Thread.sleep(serveTime);

} catch (InterruptedException e) {

e.printStackTrace();

}

long costTime = System.currentTimeMillis()-beginTime;

System.out.println(windowName+"为第"+number+"个"+"普通"+"客户完成服务,耗时"+costTime/1000+"秒");

}else{

System.out.println(windowName+"没有取到任务,先休息一秒");

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

}
}

private void expressService() {

String windowName = "第"+windowId+"号"+ type+"窗口";

Integer number = NumberMachine.getInstance().getExpressManager().fetchServiveNumber();

System.out.println(windowName+"正在获取任务");

if(number !=null){

System.out.println(windowName+"为第"+number+"个"+type+"客户服务");

long beginTime = System.currentTimeMillis();

int maxRand = Constans.MAX_SERVICE_TIME-Constans.MIN_SERVICE_TIME;

long serveTime = new Random().nextInt(maxRand)+1+Constans.MIN_SERVICE_TIME;

try {

Thread.sleep(serveTime);

} catch (InterruptedException e) {

e.printStackTrace();

}

long costTime = System.currentTimeMillis()-beginTime;

System.out.println(windowName+"为第"+number+"个"+type+"客户完成服务,耗时"+costTime/1000+"秒");

}else{

System.out.println(windowName+"没有取到任务");

commonService();

}
}

private void vipService() {

String windowName = "第"+windowId+"号"+ type+"窗口";

Integer number = NumberMachine.getInstance().getVipManager().fetchServiveNumber();

System.out.println(windowName+"正在获取任务");

if(number !=null){

System.out.println(windowName+"为第"+number+"个"+type+"客户服务");

long beginTime = System.currentTimeMillis();

//int maxRand = Constans.MAX_SERVICE_TIME-Constans.MIN_SERVICE_TIME;

//long serveTime = new Random().nextInt(maxRand)+1+Constans.MIN_SERVICE_TIME;

try {

Thread.sleep(Constans.MIN_SERVICE_TIME);

} catch (InterruptedException e) {

e.printStackTrace();

}

long costTime = System.currentTimeMillis()-beginTime;

System.out.println(windowName+"为第"+number+"个"+type+"客户完成服务,耗时"+costTime/1000+"秒");

}else{

System.out.println(windowName+"没有取到任务");

commonService();

}
}

}

----------------------------------------------------------------------------------------------

package cn.itcast.bank;

public enum CustomerType {
COMMON,EXPRESS,VIP;

public String toString(){

switch(this){

case COMMON:

return "普通";

case EXPRESS:

return "快速";

case VIP:

return name();

}

return null;
}
}

----------------------------------------------------------------------------------------------------

package cn.itcast.bank;

public class Constans {
public static int MAX_SERVICE_TIME = 10000;
public static int MIN_SERVICE_TIME = 1000;
public static int COMMON__CUSTOMER_INTERVAL_TIME
= 1;

}

---------------------------------------------------------------------------------------

package cn.itcast.bank;

import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class MainClass {
public static void main(String[] args) {

// TODO Auto-generated method stub

for(int i=1; i<5; i++){

ServiceWindow commonWindow = new ServiceWindow();

commonWindow.setWindowId(i);

commonWindow.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 number = NumberMachine.getInstance().getCommonManager().generateNewManger();

System.out.println(number+"号普通客户等待服务!");

}

},
0, //第一个开始时间

Constans.COMMON__CUSTOMER_INTERVAL_TIME, //每隔多少时间

TimeUnit.SECONDS //时间单位

);

Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new
Runnable(){

public void run(){

Integer number = NumberMachine.getInstance().getExpressManager().generateNewManger();

System.out.println(number+"号快速客户等待服务!");

}
},
0, //第一个开始时间

Constans.COMMON__CUSTOMER_INTERVAL_TIME *2, //每隔多少时间

TimeUnit.SECONDS //时间单位

);

Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new
Runnable(){
public void run(){

Integer number = NumberMachine.getInstance().getVipManager().generateNewManger();

System.out.println(number+"号vip客户等待服务!");

}
},
0, //第一个开始时间

Constans.COMMON__CUSTOMER_INTERVAL_TIME *6, //每隔多少时间

TimeUnit.SECONDS //时间单位

);

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: