BlockingDeque is an extended implementation of queue where we can enqueue or dequeue on both ends of the queue.
All BlockingDeque implementions on array or linked queues are thread-safe implementations.
Below is a simple usage of BlockingDeque
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import java.util.Queue; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; public class BlockingQueuesExamples { public static void main(String[] args) throws InterruptedException { BlockingDeque<String> linkedBlockingDeque = new LinkedBlockingDeque<String>(); linkedBlockingDeque.offer("Apple"); linkedBlockingDeque.offer("Orange"); linkedBlockingDeque.offer("Peach"); queueStatus(linkedBlockingDeque); linkedBlockingDeque.offerFirst("Banana"); linkedBlockingDeque.offerFirst("Guava"); queueStatus(linkedBlockingDeque); linkedBlockingDeque.offerLast("Pomegranate"); linkedBlockingDeque.offerLast("Grape"); linkedBlockingDeque.offer("Avacado"); // Note: offerLast() and offer() method will do the same operation... queueStatus(linkedBlockingDeque); System.out.println("Dequeued at Head of Queue: " + linkedBlockingDeque.takeFirst()); System.out.println("Dequeued at Tail of Queue: " + linkedBlockingDeque.takeLast()); System.out.println("Dequeued at Head of Queue: " + linkedBlockingDeque.take()); // Note: takeFirst() and take() method will do the same operation... queueStatus(linkedBlockingDeque); } public static void queueStatus(Queue linkedBlockingDeque) { System.out.println("---------------------------"); System.out.println("Linked Blocking Deque Size:" + linkedBlockingDeque.size()); System.out.println("Items:"); System.out.println(linkedBlockingDeque); System.out.println("---------------------------"); } } |
Output:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
--------------------------- Linked Blocking Deque Size:3 Items: [Apple, Orange, Peach] --------------------------- --------------------------- Linked Blocking Deque Size:5 Items: [Guava, Banana, Apple, Orange, Peach] --------------------------- --------------------------- Linked Blocking Deque Size:8 Items: [Guava, Banana, Apple, Orange, Peach, Pomegranate, Grape, Avacado] --------------------------- Dequeued at Head of Queue: Guava Dequeued at Tail of Queue: Avacado Dequeued at Head of Queue: Banana --------------------------- Linked Blocking Deque Size:5 Items: [Apple, Orange, Peach, Pomegranate, Grape] --------------------------- |