base/common/src/main/com/thesett/common/util/concurrent/BatchSynchQueueBase.java
protected SynchRecordImpl<E> extract(boolean unblock, boolean signal)
    {
        SynchRecordImpl<E> result = buffer.remove();
        count--;

        if (signal)
        {
            notFull.signal();
        }

        if (unblock)
        {
            result.releaseImmediately();
        }

        return result;
    }
protected SynchRecordImpl<E> extract(boolean unblock, boolean signal)
    {
        SynchRecordImpl<E> result = buffer.remove();
        count--;

        if (signal)
        {
            notFull.signal();
        }

        if (unblock)
        {
            result.releaseImmediately();
        }

        return result;
    }
Removes an element from the buffer, and optionally unblocks the producer of the element, if it is waiting, and
optionally signals that the {@link #notFull} condition may now be true.

<p/>Warning: This method must only be called when holding the main {@link #lock}.

@param  unblock <tt>true</tt> if the elements producer should be released.
@param  signal  <tt>trye</tt> if the {@link #notFull} condition should be signalled.

@return The synch record for the extracted item.