Java/J2EE and SOA (348 Blogs) Become a Certified Professional
AWS Global Infrastructure

Programming & Frameworks

Topics Covered
  • C Programming and Data Structures (16 Blogs)
  • Comprehensive Java Course (4 Blogs)
  • Java/J2EE and SOA (345 Blogs)
  • Spring Framework (8 Blogs)
SEE MORE

How to Implement BlockingQueue Interface in Java

Last updated on Jun 19,2023 867 Views


A queue is an important aspect of any Programming language. Especially if we talk about Java. In this article, we will discuss the BlockingQueue Interface in Java in the following order:

 

What is a BlockingQueue Interface in Java?

A BlockingQueue Interface in Java is a queue that blocks when you try to dequeue from it and the queue is empty, or if you try to enqueue items to it and the queue is already full. A thread trying to dequeue from an empty queue is blocked until some other thread inserts an item into the queue. A thread trying to enqueue an item in a full queue is blocked until some other thread makes space in the queue, either by dequeuing one or more items or clearing the queue completely.

priority queue in c++

BlockingQueue Interface in Java doesn’t accept null values and throw NullPointerException if you try to store the null value in the queue. Java BlockingQueue implementations are thread-safe. All queuing methods are atomic in nature and use internal locks or other forms of concurrency control.

Java Queue Class Diagram

Java Queue interface extends the Collection interface. The Collection interface extends the Iterable interface. Some of the frequently used Queue implementation classes are LinkedList, PriorityQueue, ArrayBlockingQueue, DelayQueue, LinkedBlockingQueue, PriorityBlockingQueue, etc.. AbstractQueue provides a skeletal implementation of the Queue interface to reduce the effort in implementing Queue.

Stay up-to-date with the latest Flutter features and best practices through our Flutter Course.

BlockingQueue Types

The BlockingQueue are two types:

  • Unbounded Queue: The Capacity of the blocking queue will be set to Integer.MAX_VALUE. In the case of unbounded blocking queue, queue will never block because it could grow to a very large size. when you add elements it’s size grow.

Syntax:
BlockingQueue blocking queue = new LinkedBlockingDeque();

 

  • Bounded Queue: The second type of queue is the bounded queue. In case of the bounded queue you can create a queue bypassing the capacity of the queue in queues constructor:
    Syntax:
    // Creates a Blocking Queue with capacity 5

BlockingQueue blocking queue = new LinkedBlockingDeque(5);

 

Methods in BlockingQueue Interface

Modifier TypeMethod SyntaxUsed ForDescription
booleanadd(E e)Insertion

Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions, returning true upon success and throwing an IllegalStateException if no space is currently available.

booleancontains(Object o)Examine

Returns true if this queue contains the specified element.

intdrainTo(Collection c)Retrieving or Removal

Removes all available elements from this queue and adds them to the given collection.

intdrainTo(Collection c, int maxElements)Retrieving or Removal

Removes at most the given number of available elements from this queue and adds them to the given collection.

booleanoffer(E e)Insertion

Inserts the specified element into this queue if it is possible to do so immediately without violating capacity restrictions, returning true upon success and false if no space is currently available.

booleanoffer(E e, long timeout, TimeUnit unit)Insertion

Inserts the specified element into this queue, waiting up to the specified wait time if necessary for space to become available.

Epoll(long timeout, TimeUnit unit)Retrieving or Removal

Retrieves and removes the head of this queue, waiting up to the specified wait time if necessary for an element to become available.

voidput(E e)Insertion

Inserts the specified element into this queue, waiting if necessary for space to become available.

intremaining capacity()Examine

Returns the number of additional elements that this queue can ideally (in the absence of memory or resource constraints) accept without blocking, or Integer.MAX_VALUE if there is no intrinsic limit.

booleanremove(Object o)+Retrieving or Removal

Removes a single instance of the specified element from this queue, if it is present.

Etake()Retrieving or Removal

Retrieves and removes the head of this queue, waiting if necessary until an element becomes available.

 

BlockingQueue Interface in Java Example: Service

package com.journaldev.concurrency;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

public class ProducerConsumerService {

    public static void main(String[] args) {

        //Creating BlockingQueue of size 10

        BlockingQueue<Message> queue = new ArrayBlockingQueue<>(10);

        Producer producer = new Producer(queue);	

        Consumer consumer = new Consumer(queue);

        //starting producer to produce messages in queue

        new Thread(producer).start();

        //starting consumer to consume messages from queue

        new Thread(consumer).start();

        System.out.println("Producer and Consumer has been started");

    }

}

BlockingQueue Interface in Java

With this, we come to an end of the BlockingQueue Interface in Java article. I hope all your concepts are now clear.

Check out the Java training by Edureka, a trusted online learning company with a network of more than 250,000 satisfied learners spread across the globe. Edureka’s Java J2EE and SOA training and certification course are designed for students and professionals who want to be a Java Developer. The course is designed to give you a head start into Java programming and train you for both core and advanced Java concepts along with various Java frameworks like Hibernate & Spring.

Got a question for us? Please mention it in the comments section of this “BlockingQueue Interface in Java” blog and we will get back to you as soon as possible.

Upcoming Batches For Java Certification Training Course
Course NameDateDetails
Java Certification Training Course

Class Starts on 27th April,2024

27th April

SAT&SUN (Weekend Batch)
View Details
Comments
0 Comments

Join the discussion

Browse Categories

webinar REGISTER FOR FREE WEBINAR
REGISTER NOW
webinar_success Thank you for registering Join Edureka Meetup community for 100+ Free Webinars each month JOIN MEETUP GROUP

Subscribe to our Newsletter, and get personalized recommendations.

image not found!
image not found!

How to Implement BlockingQueue Interface in Java

edureka.co