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



