package devmanuals.com; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; class PutLast implements Runnable { String name; BlockingDeque bdq; public PutLast(String name, BlockingDeque bdq) { this.name = name; this.bdq = bdq; } public void run() { System.out.println(name + " inserted the element into the deque"); for (int i = 0; i < 5; i++) { bdq.add(i); try { Thread.sleep(400); System.out.println(i); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("Therfore deque = " + bdq); System.out.println("Size of deque = " + bdq.size()); int j = bdq.pollFirst(); System.out.println(name+" removes the first element (" + j + "), then remaining \n elements of deque = " + bdq + " and size = " + bdq.size()); } } class PutLast1 implements Runnable { String name; BlockingDeque bdq; public PutLast1(String name, BlockingDeque bdq) { this.name = name; this.bdq = bdq; } public void run() { try { Thread.sleep(1500); // Here the implementation of this method will insert a new element into // the deque. bdq.putLast(5); System.out .println(name+" Inserts a new element \n at last position then deque = " + bdq + "and size = " + bdq.size()); } catch (InterruptedException e) { e.printStackTrace(); } } } public class BdqPutLast { public static void main(String[] args) { BlockingDeque bdq = new LinkedBlockingDeque(5); Runnable a = new PutLast("A", bdq); Runnable b = new PutLast1("B", bdq); new Thread(a).start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } new Thread(b).start(); } }