這次的銀行排隊我們稍作調整,調整就是銀行工作人員辦理業務的時候,在隊列里依次取出排隊人員,并且保證每個人員只能取出一次,不能被多個窗口取到,這就需要多線程了,每一個窗口就是一個獨立的線程,并且所有窗口去隊列里取排隊人員的時候,涉及到資源共享的問題,要將資源上鎖,也就是使用synchronized關鍵字,可以保證每一個排隊人員只被取到一次。
下面看看代碼和運行結果:
服務器:
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;
    }



}


測試類:
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號窗口");
        Thread t2 
= new Thread(tq,"2號窗口");
        Thread t3 
= new Thread(tq,"3號窗口");
        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(
"尊敬的大爺,您的號碼是"+gw.getNumber()+"  請您到"+Thread.currentThread().getName()+"辦理業務");
            }

            
else{
                w 
= waiterlist.poll();
                
if(w!= null){
                    System.out.println(
"個人業務用戶,您的號碼是"+w.getNumber()+"  請您到"+Thread.currentThread().getName()+"辦理業務");
                }

                
else{
                    System.out.println(
"現在沒有用戶辦理業務了,喝杯咖啡吧,哈哈");
                }

            }

        }

    }

    
public void run(){
        
for(int i=0;i<20;i++){
            handBusiness();
            
try {
                Thread.sleep(
100);
            }
 catch (InterruptedException e) {
                e.printStackTrace();
            }

        }

    }

}



看看運行結果: