Class ProducerConsumerQueue<T>

java.lang.Object
org.hibernate.search.batchindexing.ProducerConsumerQueue<T>

public class ProducerConsumerQueue<T> extends Object
Implements a blocking queue capable of storing a "poison" token to signal consumer threads that the task is finished.
  • Constructor Details

    • ProducerConsumerQueue

      public ProducerConsumerQueue(int producersToWaitFor)
      Parameters:
      producersToWaitFor - The number of producer threads.
    • ProducerConsumerQueue

      public ProducerConsumerQueue(int queueLenght, int producersToWaitFor)
  • Method Details

    • take

      public T take() throws InterruptedException
      Blocks until an object is available; when null is returned the client thread should quit.
      Returns:
      the next object in the queue, or null to exit
      Throws:
      InterruptedException
    • put

      public void put(T obj) throws InterruptedException
      Adds a new object to the queue, blocking if no space is available.
      Parameters:
      obj -
      Throws:
      InterruptedException
    • producerStopping

      public void producerStopping()
      Each producer thread should call producerStopping() when it has finished. After doing it can safely terminate. After all producer threads have called producerStopping() a token will be inserted in the blocking queue to eventually awake sleeping consumers and have them quit, after the queue has been processed.