这次的银行排队我们稍作调整,调整就是银行工作人员办理业务的时候,在队列里依次取出排队人员,并且保证每个人员只能取出一次,不能被多个窗口取到,这就需要多线程了,每一个窗口就是一个独立的线程,并且所有窗口去队列里取排队人员的时候,涉及到资源共享的问题,要将资源上锁,也就是使用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();
            }

        }

    }

}



看看运行结果: