JAVA學習筆記——BlockingQueue接口

BlockingQueue是一種特殊的Queue。在加元素時,若空間不夠,能夠阻塞至空間知足;在取元素時,若空間爲0,能夠阻塞至有元素。
BlockingQueue通常用於消費者-生產者模型,它是線程安全的,即多個線程去操做BlockingQueue,有原子操做或者鎖機制保證操做過程不會出錯。java

//使用BlockingQueue的生產者-消費者模型
//相對於Linux下的模型,BlockingQueue接口封裝了具體實現
//使得使用起來很是方便
 class Producer implements Runnable {
   private final BlockingQueue queue;
   Producer(BlockingQueue q) { queue = q; }
   public void run() {
     try {
       while (true) { queue.put(produce()); }
     } catch (InterruptedException ex) { ... handle ...}
   }
   Object produce() { ... }
 }

 class Consumer implements Runnable {
   private final BlockingQueue queue;
   Consumer(BlockingQueue q) { queue = q; }
   public void run() {
     try {
       while (true) { consume(queue.take()); }
     } catch (InterruptedException ex) { ... handle ...}
   }
   void consume(Object x) { ... }
 }

 class Setup {
   void main() {
     BlockingQueue q = new SomeQueueImplementation();
     Producer p = new Producer(q);
     Consumer c1 = new Consumer(q);
     Consumer c2 = new Consumer(q);
     new Thread(p).start();
     new Thread(c1).start();
     new Thread(c2).start();
   }
 }

SynchronousQueue

SynchronousQueue類是BlockingQueue接口的一種實現。沒有容量,即便隊列裏面什麼都沒有,put()方法也會阻塞,直到另外一個線程調用了take();反之也成立。安全

相關文章
相關標籤/搜索