阻塞隊列

阻塞隊列

    阻塞隊列不一樣於普通的對列,當隊列爲空的時候,take元素就會一直阻塞住,當隊列滿的時候,put也會阻塞住。下面爲進隊和出隊的源碼:java

public class BlockingQueue {
    private List queue = new LinkedList();
    private int  limit = 10;
    public BlockingQueue(int limit){
        this.limit = limit;
    }
    public synchronized void enqueue(Object item) throws InterruptedException  {
        while(this.queue.size() == this.limit) {
            wait(); //進隊的時候,若是已經隊滿則阻塞
        }
        if(this.queue.size() == 0) {
            notifyAll(); 
        }
        this.queue.add(item);
    }
    public synchronized Object dequeue() throws InterruptedException{
        while(this.queue.size() == 0){
            wait(); //出隊的時候,若是隊空,則阻塞
        }
        if(this.queue.size() == this.limit){
            notifyAll();
        }
        return this.queue.remove(0);
    }
}
相關文章
相關標籤/搜索