------------------android培训、java培训、期待与您的交流!------------------
Window:
主要用于对六个窗口的描述,里面提供了private String type;private String index;private boolean busy = false;这些成员变量,还有work(),及stop()方法。
Consumer:
主要是提供了一个增加元素的方法addConsumer(),同时提供三个集合装三种Consumer.
BankSystem:
主调类。分别new了六个Window对象,和三个Consumer对象。所以相当于开启了9个线程。
BankSystem
import java.util.*;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class BankDispatch { ArrayList windowLiabrary = Window.windowLiabrary; Iterator windowIterator ; Iterator consumerIterator ; Window window ; Consumer consumer;
public static void main(String[] args) {
new BankDispatch(); }
public BankDispatch(){
new Consumer("ordinary");
new Consumer("express");
new Consumer("VIP");
new Window("ordinary", "1");
new Window("ordinary", "2");
new Window("ordinary", "3");
new Window("ordinary", "4");
new Window("express", "");
new Window("VIP", "");
while(true){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
}Window
package com.renren.interview;import java.util.ArrayList;import java.util.Random;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class Window { public static ArrayList windowLiabrary = new ArrayList(); private String type; private String index;
private boolean busy = false;
int ordinaryIndex,expressIndex,VIPIndex;
public Consumer consumer;
public int time;
/* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((index == null) ? 0 : index.hashCode()); result = prime * result + ((type == null) ? 0 : type.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj)
return true; if (obj == null)
return false; if (getClass() != obj.getClass())
return false; Window other = (Window) obj; if (index == null) {
if (other.index != null)
return false; } else if (!index.equals(other.index))
return false; if (type == null) {
if (other.type != null)
return false; } else if (!type.equals(other.type))
return false; return true; } public String getType(){
return type;
}
public String getIndex(){
return index;
}
public Window(String type,String index) { this.type = type; this.index = index; if(type.equals("ordinary") || type.equals("VIP")){
deal(5); } else if(type.equals("express")){
deal(1); } }
public void deal(int delay){
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
//System.out.println(Consumer.ordinaryLibrary.size());
if(consumer!=null){
stop(consumer,time);
}
if(!busy ){
if(type.equals("ordinary") && Consumer.ordinaryLibrary.contains(new Consumer("ordinary")) ){
work(consumer=Consumer.ordinaryLibrary.remove(0));
}
else if(type.equals("express")){
if(Consumer.expressLibrary.contains(new Consumer("express"))){
work(consumer=Consumer.expressLibrary.remove(0));
}
else
work(consumer = Consumer.ordinaryLibrary.remove(0));
}
else if(type.equals("VIP")){
if(Consumer.VIPLibrary.contains(new Consumer("VIP"))){
work(consumer = Consumer.VIPLibrary.remove(0));
}
else
work(consumer = Consumer.ordinaryLibrary.remove(0));
}
}
}
},
1,
time = (new Random()。nextInt(delay)+1),
TimeUnit.SECONDS);
}
public boolean isBusy(){
return busy; }
public void work(Consumer consumer){
busy = true;
System.out.println(index+"号普通窗口正在为"+consumer.index+"号普通客户服务");
}
public void stop(Consumer consumer,int time){
busy = false;
System.out.println((index+"号普通窗口为"+consumer.index+"号普通客户服务完成,耗时"+time+"秒")); //System.out.println(this.type+" window"+this.index+" is not busy"); }}Consumer
se; } else if (!index.equals(other.index))
return false; if (type == null) {
if (other.type != null)
return false; } else if (!type.equals(other.type))
return false; return true; } public String getType(){
return type;
}
public String getIndex(){
return index;
}
public Window(String type,String index) { this.type = type; this.index = index; if(type.equals("ordinary") || type.equals("VIP")){
deal(5); } else if(type.equals("express")){
deal(1); } }
public void deal(int delay){
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
//System.out.println(Consumer.ordinaryLibrary.size());
if(consumer!=null){
stop(consumer,time);
}
if(!busy ){
if(type.equals("ordinary") && Consumer.ordinaryLibrary.contains(new Consumer("ordinary")) ){
work(consumer=Consumer.ordinaryLibrary.rem
package com.renren.interview;import java.util.ArrayList;import java.util.Random;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class Consumer { public static int ordinaryIndex,expressIndex,VIPIndex; private String type; public static ArrayList ordinaryLibrary = new ArrayList(); public static ArrayList expressLibrary = new ArrayList(); public static ArrayList VIPLibrary = new ArrayList(); public ArrayList consumerLibrary1 ; public int index; public Consumer(String type){
this.type = type;
if(type.equals("ordinary")){
System.out.println((++ordinaryIndex)+"号普通客户等待服务");
index = ordinaryIndex;
addConsumer(1,ordinaryLibrary);
}
else if(type.equals("express")){
System.out.println((++expressIndex)+"号快速客户等待服务");
index = expressIndex;
addConsumer(2,expressLibrary);
}
else if(type.equals("VIP")){
System.out.println((++VIPIndex)+"号VIP客户等待服务");
index = VIPIndex;
addConsumer(6,VIPLibrary);
}
}
public void addConsumer(final int delay, ArrayList consumerLibrary){
this.consumerLibrary1 = consumerLibrary;
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
@Override
public void run() {
for(int i=1;i<1000;i++){
try {
Thread.sleep(/*(new Random()。nextInt(delay)+5)*/delay*1000);
consumerLibrary1.add(new Consumer(type));
System.out.println(ordinaryLibrary.size());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}/* (non-Javadoc) * @see java.lang.Object#hashCode() */@Overridepublic int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((type == null) ? 0 : type.hashCode()); return result;}/* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */@Overridepublic boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Consumer other = (Consumer) obj; if (type == null) { if (other.type != null)
return false; } else if (!type.equals(other.type)) return false; return true;}
}