阻塞佇列(BlockingQueue)
BlockingQueue
在java.util.concurrent包中的 BlockingQueue介面類是一種執行緒安全的佇列。
BlockingQueue的使用說明
BlockingQueue一般用於這樣的場景:一個執行緒生產物件,另一個執行緒來消耗物件,

20181120.png
生產執行緒會持續生產新的物件並把他們插入到佇列中,直到佇列所能包含物件的最大上限。
如果阻塞佇列到達了上限,這時如果嘗試插入新的的物件,生產執行緒將會被阻塞。並且阻塞會一直保持直到消費執行緒從佇列中取出一個物件。
同樣,消費執行緒會持續從阻塞佇列中取出物件並處理他們。如果消費執行緒試圖從一個空的佇列中取出物件,消費執行緒將被阻塞住,直到生產執行緒向佇列中加入了一個物件。
消費者
public class Consumer implements Runnable{ private boolean quit; private BlockingQueue<String> queue; public Consumer(BlockingQueue<String> queue) { this.queue = queue; } @Override public void run() { while (quit){ try { String take = queue.take(); } catch (InterruptedException e) { e.printStackTrace(); } } } }
生產者
public class Producer implements Runnable { private BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this.queue = queue; } @Override public void run() { try { queue.put("1"); queue.put("2"); } catch (InterruptedException e) { e.printStackTrace(); } } }