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