這次的銀行排隊(duì)我們稍作調(diào)整,調(diào)整就是銀行工作人員辦理業(yè)務(wù)的時(shí)候,在隊(duì)列里依次取出排隊(duì)人員,并且保證每個(gè)人員只能取出一次,不能被多個(gè)窗口取到,這就需要多線程了,每一個(gè)窗口就是一個(gè)獨(dú)立的線程,并且所有窗口去隊(duì)列里取排隊(duì)人員的時(shí)候,涉及到資源共享的問(wèn)題,要將資源上鎖,也就是使用synchronized關(guān)鍵字,可以保證每一個(gè)排隊(duì)人員只被取到一次。
下面看看代碼和運(yùn)行結(jié)果:
服務(wù)器:
public class QueueServer {
public Queue<Waiter> waiterlist = new LinkedList<Waiter>();
public Queue<GoldWaiter> goldwaiterlist = new LinkedList<GoldWaiter>();
public Queue<Waiter> init(){
Waiter w = null;
for(int i=1;i<50;i++){
w = new Waiter();
w.setNumber(i);
w.setFrontnumer(i-1);
waiterlist.offer(w);
}
return waiterlist;
}
public Queue<GoldWaiter> goldinit(){
GoldWaiter w = null;
for(int i=1;i<10;i++){
w = new GoldWaiter();
w.setNumber(i);
w.setFrontnumer(i-1);
goldwaiterlist.offer(w);
}
return goldwaiterlist;
}


}
測(cè)試類:
public class TestQueue implements Runnable{

QueueServer server = new QueueServer();
Queue<Waiter> waiterlist = server.init();
Queue<GoldWaiter> goldwaiterlist = server.goldinit();
public static void main(String[] args) {
TestQueue tq = new TestQueue();
Thread t1 = new Thread(tq,"1號(hào)窗口");
Thread t2 = new Thread(tq,"2號(hào)窗口");
Thread t3 = new Thread(tq,"3號(hào)窗口");
t1.start();
t2.start();
t3.start();
}
public synchronized void handBusiness(){
Waiter w = null;
GoldWaiter gw = null;
if(waiterlist!=null){
gw = goldwaiterlist.poll();
if(gw!=null){
System.out.println("尊敬的大爺,您的號(hào)碼是"+gw.getNumber()+" 請(qǐng)您到"+Thread.currentThread().getName()+"辦理業(yè)務(wù)");
}
else{
w = waiterlist.poll();
if(w!= null){
System.out.println("個(gè)人業(yè)務(wù)用戶,您的號(hào)碼是"+w.getNumber()+" 請(qǐng)您到"+Thread.currentThread().getName()+"辦理業(yè)務(wù)");
}
else{
System.out.println("現(xiàn)在沒(méi)有用戶辦理業(yè)務(wù)了,喝杯咖啡吧,哈哈");
}
}
}
}
public void run(){
for(int i=0;i<20;i++){
handBusiness();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
看看運(yùn)行結(jié)果:
下面看看代碼和運(yùn)行結(jié)果:
服務(wù)器:




























測(cè)試類:














































看看運(yùn)行結(jié)果:
