阻塞隊列不一樣於普通的對列,當隊列爲空的時候,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); } }