LinkedTransferQueue hasWaitingConsumer() method in Java

The Java.util.concurrent.LinkedTransferQueue.hasWaitingConsumer() method always returns true if there is at least one consumer in the queue waiting to receive an element via BlockingQueue.take() or timed poll. The returned value represents a momentary state of affairs.
Syntax
public boolean hasWaitingConsumer()
Parameters: It does not take in any parameter.
Return Value: This method returns a boolean value which is true if at least one consumer is present in the queue.
Below are a few examples to illustrate the LinkedTransferQueue.hasWaitingConsumer() method:
Example 1:
// Java code to demonstrate// hasWaitingConsumer() method import java.util.concurrent.LinkedTransferQueue; class GFG { public static void main(String args[]) { LinkedTransferQueue<String> LTQ = new LinkedTransferQueue<String>(); LTQ.add("Geeks"); LTQ.add("For"); LTQ.add("Geeks"); LTQ.add("GeeksForGeeks"); System.out.println(LTQ.hasWaitingConsumer()); }} |
false
Example 2:
// Java code to demonstrate// hasWaitingConsumer() method import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.LinkedTransferQueue; public class GFG { LinkedTransferQueue<Integer> LTQ = new LinkedTransferQueue<>(); class LTQProducer implements Runnable { @Override public void run() { for (int i = 0; i < 3; i++) { try { System.out.println("Producer is" + " waiting to transfer"); LTQ.transfer(i); System.out.println("Producer transferred" + " element: " + i); System.out.println("Is there any consumer" + " still waiting to" + " receive an element" + " after transfer -> " + LTQ.hasWaitingConsumer()); } catch (InterruptedException e) { e.printStackTrace(); } } } } class LTQConsumer implements Runnable { int id; LTQConsumer(int id) { this.id = id; } @Override public void run() { try { System.out.println("Consumer " + id + " is waiting to " + "take an element."); System.out.println("Is there any consumer" + " still waiting to" + " receive an element" + " after transfer -> " + LTQ.hasWaitingConsumer()); Integer s = LTQ.take(); System.out.println("Consumer " + id + " received Element: " + s); } catch (InterruptedException e) { System.out.println(e); } } } // Driver code public static void main(String[] args) throws InterruptedException { GFG ob = new GFG(); ExecutorService exService = Executors.newFixedThreadPool(3); LTQProducer p = ob.new LTQProducer(); LTQConsumer c1 = ob.new LTQConsumer(0); LTQConsumer c2 = ob.new LTQConsumer(1); exService.execute(p); exService.execute(c1); exService.execute(c2); exService.shutdown(); }} |
Producer is waiting to transfer
Consumer 0 is waiting to take an element.
Is there any consumer waiting to take an element -> false
Consumer 1 is waiting to take an element.
Is there any consumer waiting to take an element -> false
Consumer 0 received Element: 0
Producer transferred element: 0
Is there any consumer still waiting to receive an element after transfer -> true
Producer is waiting to transfer
Producer transferred element: 1
Consumer 1 received Element: 1
Is there any consumer still waiting to receive an element after transfer -> false
Producer is waiting to transfer



