Java LinkedBlockingQueue

By Arvind Rai, November 15, 2023
On this page, I will create LinkedBlockingQueue example in Java application.
1. LinkedBlockingQueue is introduced in Java 5. It belongs to java.util.concurrent package.
2. LinkedBlockingQueue is a BlockingQueue which uses linked node. It can be instantiated as bounded as well unbounded.
3. BlockingQueue is a Queue but with some different features. While retrieving element from BlockingQueue, thread waits if it is empty. Once the element is added in BlockingQueue, thread is unblocked retrieving element successfully. Same happens when thread is trying to add element in BlockingQueue. If the size of BlockingQueue is limited and it is already full, then thread waits until it gets space to add element.

LinkedBlockingQueue

LinkedBlockingQueue implements BlockingQueue and works as linked node. It can be instantiated as bounded as well as unbounded. The elements in LinkedBlockingQueue are managed as First-In First-Out (FIFO) rule. Find the details of some methods of this class.
offer(E e): It inserts the element at the tail of queue without exceeding LinkedBlockingQueue size. On success it returns true otherwise false.
put(E e): Inserts the element at the tail of the queue and waits for space if necessary.
peek(): It retrieves the head of the queue without deleting it and returns null if empty.
poll(): It retrieves and removes the head of the queue and returns null if empty.
remove(Object o): Removes the specified element from the queue.
take(): Retrieves and removes the head of the queue and waits if necessary.

Example

LinkedBlockingQueueTest.java
package com.concretepage.concurrent;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.LinkedBlockingQueue;
public class LinkedBlockingQueueTest {
    private final LinkedBlockingQueue<String> lbqueue = new LinkedBlockingQueue<String>();
    class ThreadA implements Runnable {
        @Override
        public void run() {
        	lbqueue.offer("AAAA");
        	lbqueue.offer("BBBB");
        	lbqueue.offer("CCCC");
        	lbqueue.offer("DDDD");
        	lbqueue.offer("EEEE");
        }
    }
    class ThreadB implements Runnable {
        @Override
        public void run() {
    		try {
    			for (int i=0; i < 5; i++) {
    				System.out.println(lbqueue.take());
    			}
    		} catch (InterruptedException e) {
    			e.printStackTrace();
    		}
        }
    }
    public static void main(String... args) {
		ExecutorService service = Executors.newFixedThreadPool(2);
		LinkedBlockingQueueTest linkedBlockingQueueTest = new LinkedBlockingQueueTest();
		ThreadA threadA = linkedBlockingQueueTest.new ThreadA();
		ThreadB threadB  = linkedBlockingQueueTest.new ThreadB();		
		service.execute(threadA);
		service.execute(threadB);		
		service.shutdown();        
    }
} 
Find the output.
AAAA
BBBB
CCCC
DDDD
EEEE 
POSTED BY
ARVIND RAI
ARVIND RAI
LEARN MORE







©2024 concretepage.com | Privacy Policy | Contact Us