Java Collection Tutorial - Java BlockingDeque.offerFirst(E e, long timeout, TimeUnit unit)








Syntax

BlockingDeque.offerFirst(E e, long timeout, TimeUnit unit) has the following syntax.

boolean offerFirst(E e,   long timeout,   TimeUnit unit)   throws InterruptedException

Example

In the following code shows how to use BlockingDeque.offerFirst(E e, long timeout, TimeUnit unit) method.

//  ww  w .j a  v  a  2  s .  c o m
import java.util.concurrent.BlockingDeque;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;

class Producer implements Runnable {
  private String name;

  private BlockingDeque<Integer> deque;

  public Producer(String name, BlockingDeque<Integer> deque) {
    this.name = name;
    this.deque = deque;
  }

  public synchronized void run() {
    for (int i = 0; i < 10; i++) {
      try {
        deque.offerFirst(i,999,TimeUnit.MINUTES);
        System.out.println(name + " puts " + i);
        Thread.sleep(300);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

class Consumer implements Runnable {
  private String name;

  private BlockingDeque<Integer> deque;

  public Consumer(String name, BlockingDeque<Integer> deque) {
    this.name = name;
    this.deque = deque;
  }

  public synchronized void run() {
    for (int i = 0; i < 10; i++) {
      try {
        int j = deque.takeLast();
        System.out.println(name + " takes " + j);
        Thread.sleep(3000);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
    }
  }
}

public class Main {
  public static void main(String[] args) {
    BlockingDeque<Integer> deque = new LinkedBlockingDeque<Integer>(5);
    Runnable producer = new Producer("Producer", deque);
    Runnable consumer = new Consumer("Consumer", deque);
    new Thread(producer).start();
    try {
      Thread.sleep(500);
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

    new Thread(consumer).start();
  }
}

The code above generates the following result.