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("---------------------------");
}
}