ArrayBlockingQueue

This class imlements BlockingQueue interface that allows to create a Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element.

A bounded blocking queue backed by an array. This queue orders elements FIFO (first-in-first-out).
The head of the queue is that element that has been on the queue the longest time.The tail of the queue is that element that has been on the queue the shortest time. New elements are inserted at the tail of the queue, and the queue retrieval operations obtain elements at the head of the queue.

This is a classic "bounded buffer", in which a fixed-sized array holds elements inserted by producers and extracted by consumers. Once created, the capacity cannot be increased. Attempts to put an element into a full queue will result in the operation blocking; attempts to take an element from an empty queue will similarly block.

This class supports an optional fairness policy for ordering waiting producer and consumer threads. By default, this ordering is not guaranteed. However, a queue constructed with fairness set to true grants threads access in FIFO order. Fairness generally decreases throughput but reduces variability and avoids starvation.

Following program is an example of priority queue

package collection.demos;



import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

class Producer extends Thread{

    BlockingQueue queue;



    @Override

    public void run() {

        for (int i = 0; i < 10; i++) {

            try {

                String e=i+" Element";

                System.out.println("Produced : "+e);

                queue.put(e);

            } catch (InterruptedException ex) {

                System.out.println("Exception "+ex);

            }

        }

    }



}

class Consumer extends Thread{

    BlockingQueue queue;

    @Override

    public void run() {

        for (int i = 0; i < 10; i++) {

            try {

                System.out.println("Consumed : "+queue.take());

            } catch (InterruptedException ex) {

                System.out.println("Exception "+ex);

            }

        }

    }

}

public class BlockingQueueDemo {



    public static void main(String[] args) {

        ArrayBlockingQueue<String> q = new ArrayBlockingQueue<String>(10);

        Producer p=new Producer();

        Consumer c=new Consumer();

        p.queue=q;

        c.queue=q;

        p.start();

        c.start();

    }

}

/*

 * OUTPUT

Produced : 0 Element

Produced : 1 Element

Produced : 2 Element

Produced : 3 Element

Produced : 4 Element

Produced : 5 Element

Produced : 6 Element

Produced : 7 Element

Produced : 8 Element

Produced : 9 Element

Consumed : 0 Element

Consumed : 1 Element

Consumed : 2 Element

Consumed : 3 Element

Consumed : 4 Element

Consumed : 5 Element

Consumed : 6 Element

Consumed : 7 Element

Consumed : 8 Element

Consumed : 9 Element

 */

No comments:

Popular Posts